1. 程式人生 > >spring-boot上傳檔案最佳解決辦法

spring-boot上傳檔案最佳解決辦法

很多人使用springboot上傳檔案的時候最煩的就是上傳路徑的問題 下面的方法最便捷 最易懂

在配置檔案中配置如下

xcloud:
  #uploadPath: D:/var/uploaded_files/
  uploadPath: C:/Users/renke/apache-tomcat-8.5.24/upload/
media:
  save:
    urlprefix: https://www.xxxxx.com

編寫上傳路徑配置類

@Component
@ConfigurationProperties(prefix="xcloud")
public class UploadConfig {
   //上傳路徑
   private String uploadPath;

   public String getUploadPath() {
      return uploadPath;
   }

   public void setUploadPath(String uploadPath) {
      this.uploadPath = uploadPath;
   }
}

上傳檔案方法注入

@Autowired
UploadConfig uploadConfig;
@Value("${media.save.urlprefix}")
private String urlprefix;
/**
 * 本地上傳檔案介面
 * @param file
 * @param request
 * @return
 * @throws IOException
 */
@CrossOrigin
@PostMapping("/{account}/upload.json")
public Response upload(@RequestParam("file") MultipartFile[] file,@PathVariable("account") String account,
                       HttpServletRequest request) throws IOException {
    log.info("圖片上傳開始.....");
    if (null != file && file.length > 0) {
        //遍歷並儲存檔案
        for (MultipartFile files : file) {
            if (file != null) {
                //取得當前上傳檔案的檔名稱
                String fileName = account + files.getOriginalFilename();
                //如果名稱不為“”,說明該檔案存在,否則說明該檔案不存在
                //本地上傳圖片方式
                fileName = FileUtil.renameToUUID(fileName);
                try {
                    FileUtil.uploadFile(files.getBytes(), uploadConfig.getUploadPath(), fileName);
                } catch (Exception e) {
                    return Response.fail("異常");
                }
                    log.info(">>>>>>>>>>>>>本地上傳圖片路徑  {}", "/files/" + fileName);
                    return Response.success().put("fileName", urlprefix + "/files/" + fileName);
            }
        }
    } else {
        return Response.fail("上傳檔案不能為空");
    }
    return Response.success();
}

然後新建一個WebConfigurer配置類 繼承WebMvcConfigurerAdapter

@Slf4j
@Component
class WebConfigurer extends WebMvcConfigurerAdapter {
   @Autowired
   UploadConfig uploadConfig;

   @Override
   public void addResourceHandlers(ResourceHandlerRegistry registry) {
      registry.addResourceHandler("/files/**").addResourceLocations("file:///"+uploadConfig.getUploadPath());
   }
}
這樣上傳的檔案就可以儲存在你配置檔案中設定的路徑中 訪問加上字首就可以指向本地儲存路徑了 注意一下 有攔截器或者許可權攔截的業務時 記得把/filse路徑放行才能訪問
技術有限 如有疑問 歡迎指導