我在Java上编写了一个REST服务,允许用户上传一个jar文件。用户可以使用以下命令上传文件:
curl --request POST --data-binary "@jarToUpload.jar" http://localhost:9090/entry-point/upload
服务接收文件为InputStream
。
我需要检索输入并检查是否有效JAR。
如果jar有效,我需要将它作为流存储在远程主机上。我不需要在本地保存它。
我找到了这样做的方法,但它需要创建一个临时文件,验证它,然后将其作为流发送到远程文件。
public static File stream2file(InputStream in) throws IOException {
final File tempFile = File.createTempFile("test", ".jar");
tempFile.deleteOnExit();
try {
FileOutputStream out = new FileOutputStream(tempFile);
IOUtils.copy(in, out);
} catch (Exception e) {
}
return tempFile;
}
File file = stream2file(payload);
ZipFile zip = new ZipFile(file);
boolean hasManifestEntry = zip.getEntry("META-INF/MANIFEST.MF") != null;
if(hasManifestEntry){
FileInputStream fileInputStream = new FileInputStream(file);
}
有没有办法在没有保存临时文件的情况下执行此操作?
答案 0 :(得分:1)
您可以使用java.util.zip.ZipInputStream类来动态解析Zip文件:
public boolean hasManifestEntry(InputStream is) throws IOException {
ZipInputStream zis = new ZipInputStream(is);
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
if ("META-INF/MANIFEST.MF".equals(entry.getName()))
return true;
}
return false;
}