首页 > 解决方案 > 我正在尝试编写一个程序,该程序将密码保护用户的 pdf。用户需要能够上传 pdf 并下载受保护的

问题描述

在我的尝试中,我会得到一个损坏的文件或一个不受保护的 pfd,这是我使用的代码:

//上传文件方法

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public ResponseEntity<List<String>> uploadFiles(@RequestParam("files")List<MultipartFile> multipartFiles) throws IOException, DocumentException {
    List<String> filenames = new ArrayList<>();
    for (MultipartFile file : multipartFiles){
        String filename = StringUtils.cleanPath(file.getOriginalFilename());
        Path fileStorage = get(DIRECTORY, filename).toAbsolutePath().normalize();
        copy(file.getInputStream(), fileStorage, REPLACE_EXISTING);

        File f = new File(String.valueOf(fileStorage));
        if(!f.exists() && !f.isDirectory()) {
            try {
                FileInputStream fis = new FileInputStream(f);
                PdfReader pdfReader = new PdfReader(fis);
                pdfReader.setUnethicalReading(true);
                WriterProperties writerProperties = new WriterProperties();
                writerProperties.setStandardEncryption(OWNER_PASSWORD.getBytes(),
                        USER_PASSWORD.getBytes(), EncryptionConstants.ALLOW_PRINTING,
                        EncryptionConstants.ENCRYPTION_AES_128);
                PdfWriter pdfWriter = new PdfWriter(new FileOutputStream("Protected_"+DIRECTORY), writerProperties);
                PdfDocument pdfDocument = new PdfDocument(pdfReader, pdfWriter);
                pdfDocument.close();

            } catch (Exception e) {
                e.printStackTrace();
            }

        }
        filenames.add(filename);

    }
    return ResponseEntity.ok().body(filenames);
}

对此问题的任何帮助将不胜感激。因为我需要我的用户上传一个普通的 pdf 文件,并能够下载相同的 pdf 文件并有密码保护

标签: javaspring-boot

解决方案


感谢您提出将其分解的建议,创建加密方法有助于生成受保护的文件。

    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public ResponseEntity<List<String>> uploadFiles(@RequestParam("files")List<MultipartFile> multipartFiles) throws IOException, DocumentException {
        List<String> filenames = new ArrayList<>();
        for (MultipartFile file : multipartFiles){
            String filename = StringUtils.cleanPath(file.getOriginalFilename());
            Path fileStorage = get(DIRECTORY, filename).toAbsolutePath().normalize();
            copy(file.getInputStream(), fileStorage, REPLACE_EXISTING);
            encrypt(fileStorage, filename);
            filenames.add(filename);

        }
        return ResponseEntity.ok().body(filenames);
    }

    public static void encrypt(Path src, String filename){
            try {
                FileInputStream fis = new FileInputStream(String.valueOf(src));
                PdfReader pdfReader = new PdfReader(fis);
                pdfReader.setUnethicalReading(true);
                WriterProperties writerProperties = new WriterProperties();
                writerProperties.setStandardEncryption(OWNER_PASSWORD.getBytes(),
                        USER_PASSWORD.getBytes(), EncryptionConstants.ALLOW_PRINTING,
                        EncryptionConstants.ENCRYPTION_AES_128);
                PdfWriter pdfWriter = new PdfWriter(new FileOutputStream(filename), writerProperties);
                PdfDocument pdfDocument = new PdfDocument(pdfReader, pdfWriter);
                pdfDocument.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
    }

推荐阅读