Spring Boot文件上传与下载

Spring Boot文件上传与下载

1.文件上传

@Controller
public class FileUploadController {

    /**
     * 单文件上传
     * 
     * @param request
     * @param multipartHttpServletRequest
     * @return
     */
    @RequestMapping(path = { "file" }, method = { RequestMethod.POST })
    @ResponseBody
    public String fileUpload(HttpServletRequest request, MultipartHttpServletRequest multipartHttpServletRequest) {
        MultipartFile file = multipartHttpServletRequest.getFile("file");
        String originalFilename = file.getOriginalFilename();
        System.out.println("上传文件的原文件名为 : " + originalFilename);
        String[] split = originalFilename.split("\\.");
        String fileType = split.length > 1 ? split[split.length - 1] : null;
        System.out.println("文件类型为 : " + split[split.length - 1]);

        String fileName = UniqueUtil.generate();

        String name = null;
        if (null == fileType || "".equals(fileType)) {
            // 无文件类型
            name = "D:\\workspace\\SpringBootDemo\\" + fileName;
        } else {
            name = "D:\\workspace\\SpringBootDemo\\" + fileName + "." + fileType;
        }
        FileOutputStream out = null;
        FileInputStream in = null;
        try {
            out = new FileOutputStream(name);
            in = (FileInputStream) file.getInputStream();

            byte[] buffers = new byte[1024];

            while (in.read(buffers) != -1) {
                out.write(buffers);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                in.close();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return "上传成功!";
    }

    /**
     * 多文件上传
     * 
     * @param multipartHttpServletRequest
     * @return
     */
    @RequestMapping(path = { "multiFile" }, method = { RequestMethod.POST })
    @ResponseBody
    public String multiFile(MultipartHttpServletRequest multipartHttpServletRequest) {
        Iterator<String> fileNames = multipartHttpServletRequest.getFileNames();
        while (fileNames.hasNext()) {
            List<MultipartFile> files = multipartHttpServletRequest.getFiles(fileNames.next());
            Iterator<MultipartFile> iterator = files.iterator();
            while (iterator.hasNext()) {
                String saveFile = saveFile(iterator.next());
                System.out.println("上传文件成功 : " + saveFile);
            }
        }
        return null;
    }

    private String saveFile(MultipartFile file) {
        String originalFilename = file.getOriginalFilename();
        System.out.println("上传文件的原文件名为 : " + originalFilename);
        String[] split = originalFilename.split("\\.");
        String fileType = split.length > 1 ? split[split.length - 1] : null;
        System.out.println("文件类型为 : " + split[split.length - 1]);

        String fileName = UniqueUtil.generate();

        String name = null;
        if (null == fileType || "".equals(fileType)) {
            // 无文件类型
            name = "D:\\workspace\\SpringBootDemo\\" + fileName;
        } else {
            name = "D:\\workspace\\SpringBootDemo\\" + fileName + "." + fileType;
        }
        FileOutputStream out = null;
        FileInputStream in = null;
        try {
            out = new FileOutputStream(name);
            in = (FileInputStream) file.getInputStream();

            byte[] buffers = new byte[1024];

            while (in.read(buffers) != -1) {
                out.write(buffers);
            }
            return fileName + fileType;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                in.close();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

}

2.文件下载

@Controller
public class FileController {

    @RequestMapping(path = { "download" }, method = { RequestMethod.GET })
    public void download(String fileName, HttpServletResponse response) {
        response.setHeader("content-type", "application/octet-stream");
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        byte[] buffers = new byte[1024];
        BufferedInputStream in = null;
        OutputStream out = null;
        try {
            out = response.getOutputStream();
            in = new BufferedInputStream(new FileInputStream("D:\\workspace\\SpringBootDemo\\" + fileName));
            while (in.read(buffers) != -1) {
                out.write(buffers);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                in.close();
                out.close();
            } catch (Exception e2) {
                // TODO: handle exception
            }
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值