问题描述
最近做个东西,需求是这样的。web端上传一个zip格式的Java应用部署包到Linux服务器上的指定目录下,我负责后端。
zip包目录结构是这样的:
· conf # 该目录下存放app配置文件
· lib # 该目录下存放app用到的jar包
需求很简单,于是开始实现,核心代码也就是下面这样子。
byte[] buf = new byte[1024];
// zipFile is a org.springframework.web.multipart.MultipartFile object
try (ZipInputStream zin = new ZipInputStream(zipFile.getInputStream())) {
ZipEntry entry;
while ((entry = zin.getNextEntry()) != null) {
if (!entry.isDirectory()) {
try (OutputStream os = sftp.put(sb.toString())) {
while((zin.read(buf)) != -1) {
// write buf to Linux server by SFTP
os.write(buf);
}
os.flush();
}
}
zin.closeEntry();
}
}
乍一看,这代码没什么问题吧?简洁优雅,逻辑清晰。
才怪!这能够达到预期吗?
显然是不能啊!不然就没有本文了。
自测发现,文件是可以上传到服务器,但是:
· 上传上去的文件居然比原文件大3倍左右,原来1KB变成3KB,显然不对
· ca