将JAR验证为输入流而不保存临时文件

时间:2016-01-19 15:50:32

标签: java validation jar

我在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);
}

有没有办法在没有保存临时文件的情况下执行此操作?

1 个答案:

答案 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;
}