受密码保护的 zip 文件问题

password protected zip file issue

用户上传文件,我需要用密码保护文件,然后将其压缩到与我的代码所在的服务器不同的存储服务器中运行。所以我使用 AESEncrypter 加密文件并 jcraft.jsch.ChannelSftp 将文件传输到服务器。

public ResponseEntity<ResponseWrapper> uploadFile(@RequestParam("uploads") MultipartFile file) throws Exception {
    FileOutputStream fos = new FileOutputStream("outputfile.zip");
    AESEncrypter aesEncrypter = new AESEncrypterBC();
    aze=new AesZipFileEncrypter(fos, aesEncrypter);
    aze.add(file.getOriginalFilename(), file.getInputStream(), "test123");

    JSch ssh = new JSch();
    Session session = ssh.getSession("username", "Servername", 22);

    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    session.setPassword("*****");
    session.connect();
    Channel channel = session.openChannel("sftp");
    channel.connect();

    sftp = (ChannelSftp) channel;
    sftpChannel.put(file.getInputStream(), "/storedfiles/outputfile.zip");
}

文件正在传输到服务器,但是当我下载传输的文件并尝试打开它时显示 "Errors were found opening "..“你无法提取文件..你想解决问题吗”。不确定我为什么会遇到这个问题,它还在本地服务器中创建了一个文件,是哪一行导致的?

我尝试替换这一行

aze=new AesZipFileEncrypter(fos, aesEncrypter);

aze=new AesZipFileEncrypter("outputfile.zip", aesEncrypter); 

但努力工作。

我把文件放在远程服务器上,在输出流中读取它,然后用密码保护,解决了我的问题。

public ResponseEntity<ResponseWrapper> uploadFile(@RequestParam("uploads") MultipartFile file) throws Exception {
JSch ssh = new JSch();
Session session = ssh.getSession("username", "Servername", 22);

config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setPassword("*****");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();

sftp = (ChannelSftp) channel;
OutputStream os = sftp.put("/storedfiles/outputfile.zip");

AESEncrypter aesEncrypter = new AESEncrypterBC();
aze=new AesZipFileEncrypter(os, aesEncrypter);
aze.add(file.getOriginalFilename(), file.getInputStream(), "test123");
if(aze != null) {
 aze.close();
}    
}