springboot中实现文件上传下载

引言
之前使用springMVC进行文件上传只是上传到本地,这样很不适合项目发布,所以尝试一下如何把上传文件上传到服务器上。

1. 新建maven项目

2. 添加依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-spec</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>8.5.34</version>
        </dependency>
        <!-- 跨服务器上传 -->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-core</artifactId>
            <version>1.18.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.18.1</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
    </dependencies>
  • 配置文件
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
# all files max 
spring.servlet.multipart.max-request-size=10MB
# one file max
spring.servlet.multipart.max-file-size=10MB

#file normal path
file.staticAccessPath=/image/**
#file real path
file.uploadFolder=http://你自己买的服务器的ip/imgs/

这里的页面采用的是jsp

  • 编写配置类
@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
    
       @Value("${file.staticAccessPath}")
        private String staticAccessPath;
      
       @Value("${file.uploadFolder}")
        private String uploadFolder;
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

  //staticAccessPath 表示上传的文件地址,uploadFolder表示真实的上传地址
  registry.addResourceHandler(staticAccessPath).addResourceLocations(uploadFolder);
    }
}
  • 写controller 实现功能
@Controller
public class FileUploadController {

    @Value("${file.uploadFolder}")
    private String uploadFolder;

    @GetMapping("/fileupload")
    public String fileupload() {
        return "fileupload";
    }

    /**
     * 上传到本地
     * 
     * @param file
     * @return
     */
    @PostMapping("/fileUpload")
    @ResponseBody
    public String upload(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "上传失败,请选择文件";
        }
        String fileName = file.getOriginalFilename();
        String filePath = "D:/test/";
        File dest = new File(filePath + fileName);
        try {
            file.transferTo(dest);
            return "上传成功";
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "上传失败!";
    }

    /**
     * 跨服务器文件上传
     * 
     */
    @ResponseBody
    @PostMapping("/fileupload3")
    public String fileuoload3(@RequestParam("file") MultipartFile file) {
        System.out.println("跨服务器文件上传...");

        // 定义上传文件服务器路径
        String path = uploadFolder;

        // 获取上传文件的名称
        String filename = file.getOriginalFilename();

        // 创建客户端的对象
        Client client = Client.create();
        InputStream inputStream = null;
        try {
            inputStream = file.getInputStream();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        // 将文件传入文件服务器
        WebResource resource = client.resource(path + filename);
        resource.put(String.class, inputStream);

        return "success";
    }

    /**
     * 实现文件下载
     * @param request
     * @param fileName
     * @return
     * @throws IOException
     */
       @RequestMapping(value = "/download", method = RequestMethod.GET)
        public ResponseEntity<byte[]> download(HttpServletRequest request, HttpServletResponse response, @RequestParam("fileName") String fileName) throws IOException {
           
             BufferedInputStream in = null;
             ByteArrayOutputStream out = null;
             URLConnection conn = null;
             HttpHeaders headers = new HttpHeaders();
             headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);;
             headers.setContentDispositionFormData("attachment", new String(fileName.getBytes("UTF-8"),"iso-8859-1"));
             try {
                 URL url = new URL(uploadFolder+fileName);
                 conn = url.openConnection();
                 in = new BufferedInputStream(conn.getInputStream());
                 out = new ByteArrayOutputStream(1024);
                 byte[] temp = new byte[1024];
                 int size = 0;
                 while ((size = in.read(temp)) != -1) {
                     out.write(temp, 0, size);
                 }
                 byte[] content = out.toByteArray();
                 return new ResponseEntity<>(content, headers, HttpStatus.OK);
             } catch (Exception e) {
                 e.printStackTrace();
             } finally {
                     in.close();
                     out.close();
             }
            return null;
        }
}
  • 测试
    运行项目,测试上传,然后登录自己的服务器就会发现已经上传成功!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容