使用nginx一分钟配置一个文件(图片)服务器(附:Java Spring boot项目上传文件阿里、oss文件服务使用、fastDFS文件服务使用)
- 前言:作为一名Java工程师,文件服务用的也不少。从最早的fastDFS轻量级图片服务器到第三方如阿里OSS;七牛云存储都用过。 新公司里一方面没有linux服务器,无法搭建fastDFS文件服务器。当然也没有打算买第三方存储。所以,之前使用过的文件服务器都无效。
- 新的考虑:在windows上搭建文件服务器
- 解决:nginx作为文件服务器,指定目录存放文件。利用java文件流写入指定文件并返回文件路径。
一、配置nginx,未安装或者配置
- 打开nginx配置目录,找到nginx.config文件编辑
location /file {
alias Z:\file/;
#如果目录在download则强制下载
if ($request_filename ~* ^.*?\/download\/.*$){
add_header Content-Disposition: 'attachment;';
}
autoindex on;
}
二、在所配置路径上放入一个文件。重启nginx尝试访问文件服务器
- 重启nginx
- 浏览器访问
http://localhost:80/file/
,实际访问地址按照自己配置路径访问
- 看到如下目录,文件服务器配置完成
三、附加Java上传文件并返回文件访问路径(Spring Boot)
- yml配置
nginxFilePath: Z:\file/
//Controller 其中modelName是想将文件放入的文件夹(不存在时自动生成)
@PostMapping("/uploadToNginx")
public String uploadToNginx(@RequestParam("file") MultipartFile file,String modelName) {
if (file==null){
return "文件上传失败,请重新选择文件";
}
return fileManageService.uploadToNginx(file,modelName);
}
//Service
String uploadToNginx(MultipartFile file, String modelName);
//ServiceImpl
@Override
public String uploadToNginx(MultipartFile file, String modelName) {
try {
String path=modelName+ "/"+ IdUtil.simpleUUID() +"-"+file.getOriginalFilename();
File test = new File(nginxFilePath+path);
if (!test.exists()){
test.mkdirs();
}
file.transferTo(test);
InetAddress address = InetAddress.getLocalHost();
String ip=address.getHostAddress();
String finalPath="http://"+ip+"/file/"+path;
return finalPath;
}catch (Exception e){
log.error(file.getOriginalFilename()+"文件上传失败", e);
return file.getOriginalFilename()+"文件上传失败";
}
}
附加文章参考:
java中使用fastDFS上传图片(前端ajax+后端ssm)