Java PDF上传和下载

PDF下载PostMan测试结果是这样的:

直接把请求路径在浏览器上测试就可以出效果。

Java代码

package com.sinosoft.ie.controller;

import com.sinosoft.ie.model.ItemFiles;
import com.sinosoft.ie.service.ItemFilesService;
import com.sinosoft.ie.util.IdUtils;
import com.sinosoft.ie.util.ResponseMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * @Author 庭前云落
 * @Date 2021/3/4 9:41
 * @Description
 */
@Slf4j
@RestController
@RequestMapping("/ItemFilesController")
public class ItemFilesController {

    @Resource
    private ItemFilesService itemFilesService;

    @Value("D:/")
    private String UPLOADED_FOLDER;


    @GetMapping("/download.do")
    public ResponseMessage downloadFile(@RequestParam("fileId") String fileId,  HttpServletResponse response) throws UnsupportedEncodingException {

        //根据ID查出对应文件的文件名
        ItemFiles itemFiles = itemFilesService.selectOneByFileId(fileId);
        String fileName = itemFiles.getName();

        if (fileName != null) {
            if (fileName.contains("/") || fileName.contains("\\")) {
                return null;
            }
            File file = new File(UPLOADED_FOLDER, fileName);
            if (file.exists()) {
                response.setContentType("application/force-download");// 设置强制下载不打开
                response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));// 设置文件名
                byte[] buffer = new byte[1024];
                FileInputStream fis = null;
                BufferedInputStream bis = null;
                try {
                    fis = new FileInputStream(file);
                    bis = new BufferedInputStream(fis);
                    OutputStream os = response.getOutputStream();
                    int i = bis.read(buffer);
                    while (i != -1) {
                        os.write(buffer, 0, i);
                        i = bis.read(buffer);
                    }
                    System.out.println("success");
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (bis != null) {
                        try {
                            bis.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (fis != null) {
                        try {
                            fis.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
        return null;
    }

    @PostMapping("/upload.do")
    public ResponseMessage singleFileUpload(@RequestParam("file") MultipartFile file,HttpServletRequest request) {
        //往数据库里面存的数据
        Integer intId = IdUtils.getIntId();
        String itemId = request.getHeader("itemId");
        String userId = request.getHeader("userId");

        String originalFileName = file.getOriginalFilename().toString();
        if (!file.getName().matches("^.+\\.(?i)(pdf)$") && !file.getName().matches("^.+\\.(?i)(PDF)$") &&
                !originalFileName.matches("^.+\\.(?i)(pdf)$") && !originalFileName.matches("^.+\\.(?i)(PDF)$")
        ) {
            return null;
        }

        try {
            byte[] bytes = file.getBytes();
            if (file.getName() == null) {
                originalFileName = new String(file.getName().getBytes(), "UTF-8");
            }

            //要求上传的PDF文件名不重复,所以设置成随机的ID
            String filePath = UPLOADED_FOLDER + File.separator + String.valueOf(intId)+".pdf";
            File dest = new File(filePath);
            if (!dest.getParentFile().exists()) { //判断文件父目录是否存在
                dest.getParentFile().mkdir();
            }
            Path path = Paths.get(filePath);
            Files.write(path, bytes);

            //相关数据保存到数据库
            itemFilesService.add(String.valueOf(intId),originalFileName,itemId,userId);

            return ResponseMessage.createSucResponseMessage("PDF文件上传成功");
        } catch (Exception e) {
            log.error("PDF上传文件异常",e);
            return ResponseMessage.createErrResponseMessage("PDF上传文件失败");
        }
    }
}

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值