本地
1.UploadFile
package com.takeout.config;
import com.takeout.comm.Result;
import org.springframework.util.ClassUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.*;
/**
* @Author: 文君
* @Date: 2023-06-20-17:25
* @Description:
*/
public class UploadFile {
/**
* 单文件上传
* @param file
* @return
*/
public static Result<String> upload(MultipartFile file,String basePath){
String newfileName;
if (!file.isEmpty()) {
String fileName = file.getOriginalFilename();
newfileName= UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."), fileName.length());//设置新文件名
//String path = ClassUtils.getDefaultClassLoader().getResource("").getPath() + "static/";
String resourcesPath =basePath+"//"+ newfileName;
System.out.println(resourcesPath);
//此路径可以自己定义,这样设置的话可以在自创的target/classes/static目录下保存,
//在前端可以直接通过URL方式进行访问
try {
MyConfig.fileupload(file.getBytes(),basePath, newfileName);
} catch (IOException e) {
e.printStackTrace();
}
} else {
return Result.fail("上传文件不能为空");
}
return Result.success(newfileName);
}
/**
* 多文件上传
* @param files
* @return
*/
public static Result<Map<String, Object>> UploadList(MultipartFile[] files,String basePath){
Map<String, Object> data = new HashMap<>();
List list=new ArrayList<>();
for (MultipartFile fileUpload : files) {
String fileName = fileUpload.getOriginalFilename();//文件名
//String tmpFilePath = ClassUtils.getDefaultClassLoader().getResource("").getPath() + "static/";
//没有路径就创建路径
File tmp = new File(basePath);
if (!tmp.exists()) {
tmp.mkdirs();
}
String newfileName=UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."), fileName.length());//设置新文件名
String resourcesPath =basePath+"//"+ newfileName;
File upFile = new File(resourcesPath);
try {
fileUpload.transferTo(upFile);
list.add(newfileName);
data.put("imgUrl",list);
} catch (IOException e) {
e.printStackTrace();
}
}
if (data.isEmpty()){
return Result.fail("上传文件不能为空");
}
return Result.success(data);
}
}
2.UploadController
设置路径
@Value("${wenjun.path}") private String basePath;
/**
* 单个文件&图片上传本地
* @param file
* @return
*/
@ApiOperation(value = "单个文件本地", notes = "", httpMethod = "POST", response = Response.class)
@ApiImplicitParams({
@ApiImplicitParam(name="file", value="单个文件本地", required = true),
})
@PostMapping("/Upload")
public Result<String> upload(MultipartFile file){
return UploadFile.upload(file,basePath);
}
/**
* 上传多个文件本地
* @param files
* @return
*/
@ApiImplicitParams({@ApiImplicitParam(name="files", value="上传多个文件本地", required = true)})
@ApiOperation(value = "上传多个文件本地", notes = "", httpMethod = "POST", response = Response.class)
@PostMapping("/UploadList")
public Result<Map<String, Object>> UploadList(MultipartFile[] files){
return UploadFile.UploadList(files,basePath);
}
上传服务器
1.TencentCOSUploadFileUtil
package com.takeout.config;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.region.Region;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @Description 上传腾讯云,对象存储
* @Param null
* @Return {@link null}
* @Author wenjun
* @Date 2023/9/26 14:23
*/
public class TencentCOSUploadFileUtil {
// 存储桶名称
private static final String BUCKET_NAME = "xxxxxxxx";
//secretId 秘钥id
private static final String SECRET_ID = "xxxxxxxxx";
//SecretKey 秘钥
private static final String SECRET_KEY = "xxxxxxxxx";
// 腾讯云 自定义文件夹名称
private static final String PREFIX = "/test/";
// 访问域名
public static final String URL = "https://xxxxxxx";
// 创建COS 凭证
private static final COSCredentials credentials = new BasicCOSCredentials(SECRET_ID,SECRET_KEY);
// 配置 COS 区域 就购买时选择的区域 我这里是 南京(nanjing)
private static final ClientConfig clientConfig = new ClientConfig(new Region("ap-nanjing"));
/**
* @methodName uploadfile
* @effect:上传单文件
*/
public static String uploadfile(MultipartFile file){
// 创建 COS 客户端连接
COSClient cosClient = new COSClient(credentials,clientConfig);
// 避免文件覆盖,获取文件的原始名称,如123.jpg,然后通过截取获得文件的后缀,也就是文件的类型
String fileName = file.getOriginalFilename();
try {
assert fileName != null;
//获取文件的类型
String substring = fileName.substring(fileName.lastIndexOf("."));
File localFile = File.createTempFile(String.valueOf(System.currentTimeMillis()),substring);
file.transferTo(localFile);
Random random = new Random();
fileName =PREFIX+random.nextInt(10000)+System.currentTimeMillis()+substring;
// 将 文件上传至 COS
PutObjectRequest objectRequest = new PutObjectRequest(BUCKET_NAME,fileName,localFile);
cosClient.putObject(objectRequest);
}catch (Exception e){
e.printStackTrace();
}finally {
cosClient.shutdown();
}
return URL+fileName;
}
//上传多个文件
public static Object uploadfiles(MultipartFile[] files){
List list=new ArrayList<>();
for (MultipartFile fileUpload:files){
// 创建 COS 客户端连接
COSClient cosClient = new COSClient(credentials,clientConfig);
// 避免文件覆盖,获取文件的原始名称,如123.jpg,然后通过截取获得文件的后缀,也就是文件的类型
String fileName = fileUpload.getOriginalFilename();
try {
assert fileName != null;
//获取文件的类型
String substring = fileName.substring(fileName.lastIndexOf("."));
File localFile = File.createTempFile(String.valueOf(System.currentTimeMillis()),substring);
fileUpload.transferTo(localFile);
Random random = new Random();
fileName =PREFIX+random.nextInt(10000)+System.currentTimeMillis()+substring;
// 将 文件上传至 COS
PutObjectRequest objectRequest = new PutObjectRequest(BUCKET_NAME,fileName,localFile);
cosClient.putObject(objectRequest);
list.add(URL+fileName);
}catch (Exception e){
e.printStackTrace();
}finally {
cosClient.shutdown();
}
}
return list;
}
}