有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从Java中的谷歌云存储访问时出现损坏的TAR文件错误

我正在谷歌云存储中存储一个TAR文件。该文件可以通过gsutil成功下载,并使用macOS Archive Utility在我的计算机中提取。然而,我实现的Java程序在访问文件时总是遇到java.io.IOException: Corrupted TAR archive。我尝试了几种方法,它们都在利用org.apache.commons:commons-compress库。你能给我一些关于如何解决这个问题的见解,或者一些我可以尝试的东西吗?

以下是我尝试过的实现:

Blob blob = storage.get(BUCKET_NAME, FILE_PATH);
blob.downloadTo(Paths.get("filename.tar"));
String contentType = blob.getContentType(); // application/x-tar

InputStream is = Channels.newInputStream(blob.reader());
String mime = URLConnection.guessContentTypeFromStream(is); // null
TarArchiveInputStream ais = new TarArchiveInputStream(is);
ais.getNextEntry(); // raise java.io.IOException: Corrupted TAR archive

InputStream is2 = new ByteArrayInputStream(blob.getContent());
String mime2 = URLConnection.guessContentTypeFromStream(is2); // null
TarArchiveInputStream ais2 = new TarArchiveInputStream(is2);
ais2.getNextEntry(); // raise java.io.IOException: Corrupted TAR archive

InputStream is3 = new FileInputStream("filename.tar");
String mime3 = URLConnection.guessContentTypeFromStream(is3); // null
TarArchiveInputStream ais3 = new TarArchiveInputStream(is3);
ais3.getNextEntry(); // raise java.io.IOException: Corrupted TAR archive

TarFile file = new TarFile(blob.getContent()); // raise java.io.IOException: Corrupted TAR archive
TarFile tarFile = new TarFile(Paths.get("filename.tar")); // raise java.io.IOException: Corrupted TAR archive

另外:我试着从GCS解析JSON,它工作得很好

Blob blob = storage.get(BUCKET_NAME, FILE_PATH);
JSONTokener jt = new JSONTokener(Channels.newInputStream(blob.reader()));
JSONObject jo = new JSONObject(jt);

共 (0) 个答案