服务器文件上传方案(保存在服务器本地)
解析 Java 的 MultipartFile 接口:实现文件上传的全面指南-阿里云开发者社区 (aliyun.com)
文件上传接口
package pers.os467.management.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import pers.os467.management.base.ResponseUtils;
import pers.os467.management.base.response.ResponseEntity;
import pers.os467.management.utils.IdWorker;
import java.io.*;
@Controller
@RequestMapping("/file")
public class FileController {
@PostMapping("/upload")
public ResponseEntity uploadFile(@RequestParam("file") MultipartFile multipartFile){
IdWorker idWorker = new IdWorker(1, 1);
long fileId = idWorker.nextId();
String contentType = multipartFile.getContentType();
String extraName = contentType.substring(contentType.indexOf("/")+1);
String fileName = fileId+"."+extraName;
try {
multipartFile.transferTo(new File(fileName));
} catch (IOException e) {
e.printStackTrace();
}
return ResponseUtils.getSuccessResult(fileName);
}
}
文件名使用雪花算法生成id
配置transferTo的文件路径地址
package pers.os467.management.config;
import io.netty.util.internal.StringUtil;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.beans.factory.annotation.Value;
import javax.servlet.MultipartConfigElement;
import java.io.File;
@Configuration
public class FileConfig {
@Value("${spring.servlet.multipart.location}")
private String filePath;
@Bean
public MultipartConfigElement multipartConfigElement(){
MultipartConfigFactory factory = new MultipartConfigFactory();
if (!StringUtil.isNullOrEmpty(filePath)) {
File file = new File(filePath);
if (!file.exists()) {
boolean dirCreated = file.mkdir();
if(! dirCreated){
throw new RuntimeException("create file " + file.getAbsolutePath() + " failed!");
}
}
// 需要写和执行的权限
if(! (file.canWrite() && file.canExecute())){
throw new RuntimeException(file.getAbsolutePath() + " Permission denied!");
}
}
factory.setLocation(filePath);
return factory.createMultipartConfig();
}
}
linux开放静态资源(Nginx)
如何访问Linux服务器上的图片资源呢 - 谢呈勖 - 博客园 (cnblogs.com)
配置nginx/conf/nginx.conf
nginx/sbin/下 ./nginx -t 检测conf可用性
./nginx 启动
./nginx -s reload 重启
./nginx -s stop 停止
将以下访问规则配置到80端口中
方法1 root
#图片配置
location /image/ {
root /opt/temp/;
autoindex on;
}
#autoindex作用 含义: 自动创建索引 on是打开 off关闭
此匹配规则为 匹配 http://ip/image/xxx.jpg 定位资源到服务器的 /opt/temp/image/xxx.jpg
也就是将/image/开头的访问直接拼接到 root 规定的资源地址后
方法2 alias
#图片配置
location /image/ {
alias /image/student_management/;
autoindex on;
}
将匹配 http://ip/image/xxx.jpg 定位资源到服务器的 /image/student_management/xxx.jpg
也就是直接将/image/给替换为 定位资源的路径
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1300452403@qq.com