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