SpringBoot文件上传配置,从微信拉取临时图片, 上传阿里OSS地址
引入OSS包
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.8.0</version>
</dependency>
设置虚拟路径,访问绝对路径下资源
@Configuration
public class WebMvcConf implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
String os = System.getProperty("os.name");
if (os.toLowerCase().startsWith("win")){ //windows
registry.addResourceHandler("/usr/data/upload/**").addResourceLocations("file:" + "D:/root/upload/");
}
else {
registry.addResourceHandler("/usr/data/upload/**").addResourceLocations("file:/root/upload/");
}
}
是
public String upload(MultipartFile file){
try {
//创建OSSClient实例
OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECERET);
//上传文件流
InputStream inputStream = file.getInputStream();
String fileName = file.getOriginalFilename();
//String uuid = UUID.randomUUID().toString().replaceAll("-", "");
//fileName = uuid + name.substring(name.lastIndexOf(".")); // .png
ossClient.putObject(BUCKT_NAME, fileName, inputStream);
ossClient.shutdown();
return "https://" + BUCKT_NAME + "." + ENDPOINT + "/" + file.getOriginalFilename();
}catch (Exception e){
return null;
}
}
Configuration配置
@Configuration
public class FileUploadConfig {
@Bean
public MultipartConfigElement getMultipartConfig(){
MultipartConfigFactory multipart = new MultipartConfigFactory();
multipart.setFileSizeThreshold(DataSize.of(512, DataUnit.KILOBYTES));
multipart.setMaxFileSize(DataSize.of(4, DataUnit.MEGABYTES));
multipart.setMaxRequestSize(DataSize.of(10, DataUnit.MEGABYTES));
multipart.setLocation("/tmp/upload/");
return multipart.createMultipartConfig();
}
其他
将 MultipartFile 转换为 File 文件
public File multipartFileToFile(MultipartFile multipartFile) {
if(multipartFile == null || multipartFile.getSize() < 1)
return null;
try{
String fileName = String.valueOf(multipartFile.getOriginalFilename());
String prefix = String.valueOf(System.currentTimeMillis());
String suffix = fileName.substring(fileName.lastIndexOf(Misc.DOT));
File file = File.createTempFile(prefix, suffix);
if(file.exists())
file.deleteOnExit();
logger.info("name:{}, path:{}", file.getName(), file.getAbsolutePath());
return file;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
参考资料
Spring Boot上传文件设置绝对路径和访问绝对路径下的静态资源
https://blog.csdn.net/superlover_/article/details/80893007
https://www.cnblogs.com/baizhanshi/p/5593431.html
MultipartFile转换为File文件,都有哪些方法
https://www.bilibili.com/read/cv6753499