博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot实现一个文件上传服务
阅读量:1888 次
发布时间:2019-04-26

本文共 3707 字,大约阅读时间需要 12 分钟。

文章目录

更新记录

2021/1/1 1:00 am 单文件上传实现

2020/1/1 16:30 pm 多文件上传实现,前端跨与请求配置

需求

  • 文件上传,返回一个url,使用url可以直接访问该资源
  • 上传文件存放在本机非SprngBoot项目静态资源位置
  • 多文件上传
  • 解决跨与请求

实现

  • 配置application.yaml
    定义一个存放上传文件的位置
web:  upload-path: /xxx/uploadFile/

单文件

  • controller
@RestControllerpublic class FileUploadController {
@Value("${web.upload-path}") String fileDir; @PostMapping("upload") public Map upload(MultipartFile file, HttpServletRequest request){
String realPath = fileDir; File folder= new File(realPath); if (!folder.exists()){
folder.mkdirs(); } String oldName=file.getOriginalFilename(); String newName= UUID.randomUUID().toString()+oldName.substring(oldName.lastIndexOf(".")); Map
result=new HashMap<>(); try {
file.transferTo(new File(folder,newName)); String url=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/file/"+newName; result.put("status","ok"); result.put("url",url); } catch (IOException e) {
result.put("status","failed"); result.put("msg",e.getMessage()); } return result; }}

上面的controller会返回给用户一个类似于http://localhost:8080/file/xxx.jpg

还需要配置资源请求映射才能正常访问到该服务

  • 配置静态资源映射
@Configurationpublic class MyWebMvcConfig extends WebMvcConfigurationSupport {
@Value("${web.upload-path}") private String uploadFilePath; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/file/**").addResourceLocations("file:"+uploadFilePath); //这句不要忘了,否则项目默认静态资源映射会失效 registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); super.addResourceHandlers(registry); }}

多文件

@PostMapping("uploadMul")public Map upload(MultipartFile[] files, HttpServletRequest request){
Map
result=new HashMap<>(); int count=0; List
> list=new ArrayList<>(); if (files==null|| files.length==0){
result.put("","failed"); result.put("msg","no file"); return result; } for (MultipartFile file : files) {
Map
map=new HashMap<>(); Map res = upload(file, request); map.put("name",file.getOriginalFilename()); Object url = res.get("url"); if (url!=null){
count++; map.put("url",url); map.put("status","ok"); }else {
map.put("status","failed"); map.put("msg",res.get("msg")); } list.add(map); } result.put("upload",files.length); result.put("succeed",count); result.put("detail",list); return result;}

跨域请求

跨域请求在后端配置即可

可以全局放行,也可以只针对某些地址允许

  • 全局允许跨域请求
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.cors.CorsConfiguration;import org.springframework.web.cors.UrlBasedCorsConfigurationSource;import org.springframework.web.filter.CorsFilter;@Configurationpublic class GlobalCorsConfig {
@Bean public CorsFilter corsFilter(){
CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); corsConfiguration.setAllowCredentials(false); corsConfiguration.addAllowedMethod("*"); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addExposedHeader("*"); UrlBasedCorsConfigurationSource configurationSource = new UrlBasedCorsConfigurationSource(); configurationSource.registerCorsConfiguration("/**",corsConfiguration); return new CorsFilter(configurationSource); }}
  • 参考资料

转载地址:http://mezdf.baihongyu.com/

你可能感兴趣的文章
android app 优化启动体验, 不闪白屏并且快速展示 splash
查看>>
INSTALL_FAILED_NO_MATCHING_ABIS 解决方案
查看>>
android 把打好的 apk 包通过 adb 的方式安装到手机上
查看>>
Android Studio 依赖方式 implementation 与 compile 的区别
查看>>
区块链学习之路[持续更新]
查看>>
RecycleView-Java.lang.IllegalArgumentException: Called attach on a child which is not detached
查看>>
AI学习笔记 (一) 手写识别
查看>>
关于 AAPT2 error: check logs for details 一个特殊的情况 (๑ŐдŐ)b
查看>>
java.lang.UnsatisfiedLinkError ... couldn't find "xxx.so" 的原因以及解决方案
查看>>
七牛云图片外链失效的解决办法
查看>>
[Vue warn]: Invalid prop: type check failed for prop “src“. Expected String, Object, got Module
查看>>
Laravel 8 整合 Vue 2 解决 history 路由模式 404 问题
查看>>
Laravel8 + Vue2 + Vuetify2 开发的前后端分离的单页面博客类 Web 应用
查看>>
MongoDB 小试牛刀--创建数据库和用户
查看>>
C++单链表的文件存取
查看>>
Ubuntu 20.04 卸载 xubuntu 安装 gnome 桌面
查看>>
打造 Win10 + Kali + Ubuntu + WinPE + LiveCD + U盘存储多合一超级移动硬盘
查看>>
2021年如何学习Flutter?
查看>>
MongoDB安装教程
查看>>
使用IDEA开发Android程序(一)安装Android开发环境
查看>>