受密码保护的zip文件问题

时间:2018-12-26 22:40:22

标签: java zip jsch

用户上传文件,我需要用密码保护文件,然后将其压缩到与运行我的代码的服务器不同的存储服务器中。因此,我使用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");
}

文件正在传输到服务器,但是当我下载该传输的文件并尝试打开它时,显示“发现打开“ ..”时出错,您无法解压缩文件。。是否要解决问题”。不知道为什么我遇到这个问题,它还在本地服务器中创建文件,是哪行引起的?

我尝试替换此行

aze=new AesZipFileEncrypter(fos, aesEncrypter);

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

但努力工作。

1 个答案:

答案 0 :(得分:1)

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

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();
}    
}