SpringBoot业务开发 08、Springboot上传文件资源

简介: SpringBoot业务开发 08、Springboot上传文件资源

一、上传一个文件保存到本地


关键就是使用MultipartFile这个类来进行接受资源文件


工具类:用于资源流的写入


public class FileUtils {
    public static void uploadFile(byte[] file,String filePath,String fileName) throws IOException {
        File targetFile = new File(filePath);
        if(!targetFile.exists()){
            targetFile.mkdirs();
        }
        FileOutputStream fos = new FileOutputStream(new File(filePath, fileName));
        fos.write(file);
        fos.flush();
        fos.close();
    }
}


Controller


@RestController
public class FileUploadController {
    //@RequestParam("file"):这里设置name为file指的是传送过来的文件名称
    @PostMapping("/uploadImg")
    public String uploadImg(@RequestParam("file")MultipartFile multipartFile, HttpServletRequest request) throws IOException {
        String filePath = "C:\\Users\\Administrator\\Desktop\\images";
        //multipartFile.getBytes():读取到文件的二进制流
        //filePath:本地电脑指定目录  multipartFile.getOriginalFilename:拿到传递过来的资源的文件名
        FileUtils.uploadFile(multipartFile.getBytes(),filePath,multipartFile.getOriginalFilename());
        return "ok";
    }
}


测试:





二、上传资源到服务器指定目录并返回可访问的资源路径(闭环)


需求:对于小项目来说,我们上传资源直接到对应的服务器即可,并且能够提供可访问的资源路径。


实现:


step1:通过yaml文件来统一管理上传资源的路径以及指定的访问主机及端口。


server:
  port: 9999
spring:  
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 100MB
# 上传路径
file:
  upload:
    dir: D:/changlu/闲暇目录/upload/  # 文件上传磁盘路径
  visit:
    ip: 127.0.0.1   # 访问服务器ip地址
    path: /images/   # 访问路径
    protocol: http   # 请求协议


step2:添加一个上传配置类


@Component
public class UploadConfig {
    @Value("${file.visit.path}")
    public String visitPath;   //资源访问路径
    @Value("${file.upload.dir}")
    public String FILE_UPLOAD_DIR;   //图片上传磁盘位置
    @Value("${file.visit.ip}")
    public String ip;  //上传ip地址
    @Value("${server.port}")
    public String port;  //服务器端口号
    @Value("${file.visit.protocol}")
    public String protocol;//请求协议
}


step3:添加controller控制器来接收请求


@RestController
@Slf4j
public class UploadController {
    @Autowired
    private UploadConfig uploadConfig;
    @RequestMapping("/upload")
    public ResultBody uploadFile(@RequestParam("file")MultipartFile multipartFile, HttpServletRequest request){
        UUID uuid = UUID.randomUUID();
        String suffix = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));
        String newFileName = uuid.toString()+suffix;//待保存的文件名
        File uploadFile = new File(uploadConfig.FILE_UPLOAD_DIR);
        if(!uploadFile.exists()){
            uploadFile.mkdirs();
        }
        try {
            multipartFile.transferTo(new File(uploadConfig.FILE_UPLOAD_DIR+File.separator+newFileName));
        } catch (IOException e) {
            //UPLOAD_FAILED(1004,"图片上传失败")
            throw new OwnException(CommonExceptionEnum.UPLOAD_FAILED);
        }
        //最终访问路径
        String visitResourcePath = uploadConfig.protocol + "://" + uploadConfig.ip+":"+uploadConfig.port+uploadConfig.visitPath+newFileName;
        return ResultBody.success(visitResourcePath);
    }
}



step4:添加静态资源路径映射


@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
    @Autowired
    private UploadConfig uploadConfig;
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //映射上传资源的路径 如:/images/**  => file:D:/changlu/闲暇目录/upload/
        //注意:在指定的文件目录前一定要加file:表示使用文件访问协议
        registry.addResourceHandler( uploadConfig.visitPath+"/**").addResourceLocations("file:" + uploadConfig.FILE_UPLOAD_DIR);
    }
}


大功告成!


测试一下:


测试路径:http://localhost:9999/upload以及携带请求体名为file的指定文件,配置文件中配置了最大单个文件为10MB有限制。


下面第一张图是访问我们后台请求,第二张图是用来测试返回过来的访问路径是否能够访问!!!




相关文章
|
7月前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
7月前
|
Java 容器
SpringBoot读取resources下的文件以及resources的资源路径
SpringBoot读取resources下的文件以及resources的资源路径
163 0
|
5月前
|
存储 前端开发 Java
SpringBoot使用云端资源url下载文件的接口写法
在Spring Boot中实现从云端资源URL下载文件的功能可通过定义REST接口完成。示例代码展示了一个`FileDownloadController`,它包含使用`@GetMapping`注解的方法`downloadFile`,此方法接收URL参数,利用`RestTemplate`下载文件,并将文件字节数组封装为`ByteArrayResource`返回给客户端。此外,通过设置HTTP响应头,确保文件以附件形式下载。这种方法适用于从AWS S3或Google Cloud Storage等云服务下载文件。
516 7
|
7月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的高校实验室资源综合管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的高校实验室资源综合管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
4月前
|
前端开发 JavaScript Java
Spring Boot应用中的资源分离与高效打包实践
通过实施资源分离和高效打包策略,不仅可以提升Spring Boot应用的开发和部署效率,还能显著提高用户体验。在实际项目中,根据项目的实际情况和团队的技术栈选择合适的工具和方案是关键。希望本文能为读者在Spring Boot项目中实现资源分离和高效打包提供一些有价值的参考。
|
5月前
|
物联网
好的资源链接,gitee全糖咖啡,B站视频转成mp4,全糖咖啡 / 物联网网关数据上传,,全糖咖啡 / springboot+百度智能车牌检测
好的资源链接,gitee全糖咖啡,B站视频转成mp4,全糖咖啡 / 物联网网关数据上传,,全糖咖啡 / springboot+百度智能车牌检测
|
6月前
|
Java
基于SpringBoot的餐厅会员管理信息系统【程序资源下载】
基于SpringBoot的餐厅会员管理信息系统【程序资源下载】
28 1
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的线上学习资源智能推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的线上学习资源智能推荐系统附带文章源码部署视频讲解等
69 5
|
5月前
|
前端开发 JavaScript Java
使用Spring Boot实现跨域资源共享(CORS)
使用Spring Boot实现跨域资源共享(CORS)
|
5月前
|
前端开发 JavaScript Java
使用Spring Boot实现跨域资源共享(CORS)
使用Spring Boot实现跨域资源共享(CORS)
下一篇
DataWorks