上传文件工具类
/**
* 文件上传工具包
*/
public class FileUtils {
/**
*
* @param file 文件
* @param path 文件存放路径
* @param fileName 源文件名
* @return
*/
public static String upload(MultipartFile file, String path, String fileName){
//使用原文件名
String realPath = path + "/" + fileName;
File dest = new File(realPath);
//判断文件父目录是否存在
if(!dest.getParentFile().exists()){
dest.getParentFile().mkdir();
}
try {
//保存文件
file.transferTo(dest);
return fileName;
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public static boolean delFile(String url,String localPictures) {
File dirFile = new File(localPictures);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
//先获取最后一个 \ 所在的位置
int index1 = url.lastIndexOf("/");
//然后获取从最后一个\所在索引+1开始 至 字符串末尾的字符
String path = localPictures + url.substring(index1+1);
boolean flag = false;
File file = new File(path);
if (!file.exists()) {
return flag;
}
try{
flag = file.delete();
}catch (Exception e){
e.printStackTrace();
}
return flag;
}
/**
* 删除文件
* @param url
* @param localPictures
* @return
*/
public static boolean deleteFile(String url,String localPictures) {
boolean flag = false;
File file = new File(localPictures+url);
if (!file.exists()) {
return flag;
}
try{
flag = file.delete();
}catch (Exception e){
e.printStackTrace();
}
return flag;
}
}
yml 上传配置
#文件上传 file: uploadFolder: /data/filesimg/ httpUrl: http://127.0.0.1:9900/ #文件后缀 suffix: .png,.jpeg,.gif,.jpg,.webp,.WEBP
nginx 映射配置
server {
listen 9900;
server_name localhsot;#charset koi8-r;
#access_log logs/host.access.log main;
location ~ ^/demo/(.+\.(?:gif|jpe?g|png|webp|WEBP|apk))$ {
alias /data/filesimg/demo$1;
}
# 由于路由的资源不一定是真实的路径,无法找到具体文件
# 所以需要将请求重写到 index.html 中,然后交给真正的 Vue 路由处理请求资源
location @router {
rewrite ^.*$ /index.html last;
}
}
nginx其他配置
上传实现代码
@Value("${file.uploadFolder}")
private String uploadUrl;
@Value("${file.httpUrl}")
private String httpUrl;
@Value("${file.suffix}")
private String fileSuffix;
/**
* 图片文件上传
*
* @param file
* @param imgType 1 管理后台文件上传
* @return
*/
@Override
public Object addImg(MultipartFile file) {
// 判断文件后缀
String fileNameSuffix = FileNameUtils.getSuffix(file.getOriginalFilename());
String url = JsonUtil.toJson(fileSuffix);
if (!url.contains(fileNameSuffix)) {
return "失败";
}
String shopping = "demo/";
//商品类型图片上传服务器地址
String localProductTypePictures = uploadUrl + shopping;
//"商品类型图片上传访问地址"
String imgServiceTypePath = httpUrl + shopping;
//生成文件
String name = FileNameUtils.getFileName(file.getOriginalFilename());
if (Objects.nonNull(name)) {
FileUtils.delFile(name, localProductTypePictures);
}
//上传图片
boolean flag = false;
String visit = FileUtils.upload(file, localProductTypePictures, name);
if (visit != null) {
flag = true;
}
if (flag) {
//得到上传链接
return "img:"+imgServiceTypePath + visit;
}
return "失败";
}
/**
* 图片删除
*
* @param imgUrl 图片路径
* @return
*/
@Override
public Object deleteImg(String imgUrl) {
imgUrl = imgUrl.replace(httpUrl, "");
return FileUtils.deleteFile(imgUrl, uploadUrl);
}
post 清求
服务器 可以看到成功上传上去了
访问也能访问到该图片