1、application.yml配置
file:
# 配置本地映射路径
# upload-path: F:/vfile//images/
# linux 存放地址物理路径
upload-path: //opt//weiliao//hailiao//uploadFile//
2、WebMvcConfigurer 配置,访问图片地址重定向
package com.hi.hailiaowenan.base.config;
import java.util.List;
import java.util.TimeZone;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.hi.hailiaowenan.interceptor.ManagerInterceptor;
import com.hi.hailiaowenan.interceptor.SessionInterceptor;
@Configuration
public class WebAppConfigurer implements WebMvcConfigurer {
@Value("${file.upload-path}")
private String filePathPrefix;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/upload/file/**").addResourceLocations("file:///"+filePathPrefix);
}
}
3、图片上传删除controller
package com.hi.hailiaowenan.affair.controller;
import java.io.File;
import java.util.Map;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSON;
import com.hi.hailiaowenan.affair.bean.Upload;
import com.hi.hailiaowenan.affair.service.UploadService;
import com.hi.hailiaowenan.base.bean.ReturnCode;
import com.hi.hailiaowenan.base.bean.ReturnObject;
@Controller
@RequestMapping("/file")
public class UploadController {
private static final Logger logger = LoggerFactory.getLogger(UploadController.class);
// private static final String REAL_PATH = "F://vfile//images//"; // 指定带盘符的路径, 物理路径
// private static final String REAL_PATH = "//opt//weiliao//hailiao//uploadFile//"; // linux 存放地址物理路径
private static final String PUBLIC_PATH = "/upload/file/"; // 文件前缀
@Value("${file.upload-path}")
private String filePathPrefix;
@Autowired
private UploadService uploadService;
/* 上传图片 */
@RequestMapping("/upload")
public @ResponseBody ReturnObject upload(@RequestParam("uploadFile") MultipartFile fileUpload) throws Exception {
logger.info("fileUpload: params data");
Upload upload = new Upload();
// 得到图片的原始文件名
String originalName = fileUpload.getOriginalFilename();
/**
* 为了处理出现重名现象, 将原始文件名去掉,
* 通过UUID算法生成新的文件名
*/
String uuidName = UUID.randomUUID().toString();
// uuid名称加上文件的后缀名
String newFile = uuidName + originalName.substring(originalName.lastIndexOf("."));
// 创建File文件
File file = new File(filePathPrefix + newFile);
// 将图片写入到具体的位置
fileUpload.transferTo(file);
// String allPath = "/vfile/images/" + newFile;
String allPath = PUBLIC_PATH + newFile;
System.out.println("add name:" + newFile);
upload.setName(newFile);
upload.setPath(allPath);
uploadService.insert(upload);
return new ReturnObject(ReturnCode.SUCCESS, allPath);
}
// 删除文件图片 根据path集合
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public @ResponseBody ReturnObject deleteUpload(@RequestBody Map<String, Object> params) {
logger.info("deleteActivity: params data ===> " + JSON.toJSONString(params));
String str = params.get("pathList").toString(); //获取前台的数组名字
if (StringUtils.isEmpty(str) || str.equals("")) {
return new ReturnObject(ReturnCode.PARAMETERS_ERROR, "参数为空或格式错误");
}
String[] pathList = str.split(",");
for(int i = 0; i < pathList.length; i++){
//获取文件名,用于后面的遍历查找删除 /vfile/images/ 截取字段 长度为14
// Integer len = pathList[i].indexOf("/vfile/images");
// String name = pathList[i].substring(14 + len);
Integer len = pathList[i].indexOf(PUBLIC_PATH);
String name = pathList[i].substring(13 + len);
pathList[i] = PUBLIC_PATH + name;
System.out.println("del name:"+name);
//获取目标文件夹:项目中图片所在的绝对路径
File folder = new File(filePathPrefix);
File[] files = folder.listFiles();
for(File file : files){
if (file.getName().equals(name)) {
file.delete();
}
}
}
uploadService.delete(pathList);
return new ReturnObject(ReturnCode.SUCCESS);
}
}
4、nginx 配置域名映射
#user nobody;
worker_processes 1;
#全局错误日志
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
# 开启gzip 来提高页面加载速度
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
# HTTPS server
#
server {
### 此处省略代码
# 图片访问地址
location /upload/file {
proxy_pass http://服务器地址:端口号/upload/file/;
}
}
}