linux - tar.gz 的 Linux 拆分在加入时运行良好,但在 S3 存储桶的帮助下转移到远程机器时
问题描述
我有几个文件,我做了 tar.gz。
由于这个文件可能会变得太大,因此我使用了 Linux 拆分。由于这需要转移到另一台机器上,我使用 s3 存储桶来传输这些文件。我使用 application/octet-stream content-type 来上传这些文件。下载的文件显示与原始大小完全相同的大小,因此不会丢失任何字节。
现在,当我这样做时cat downloaded_files_* > tarball.tar.gz
,大小与原始文件完全相同,但只有带有 _aa 的部分被提取。
我检查了文件的类型
file downloaded_files_aa
这是 tar zip 文件(gzip compressed data, from Unix, last modified: Sun May 17 15:00:41 2020)
但所有其他文件都是data
文件
我想知道如何获取文件。
注意:通过 API 网关进行 Http 上传以将文件上传到 s3
================================ 只是把我的调试结果放在希望它可能会帮助面临同样问题的人。
由于我们想使用 API 网关,所以上传调用是通过 http 调用完成的。这是不使用常规 aws sdk 的东西。
https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html 代码示例:https://docs.aws.amazon.com/AmazonS3/latest/API/samples/AWSS3SigV4JavaSamples。压缩
经过一些调试,我们发现这条腿工作正常。
由于我们要下载文件的机器可以直接访问 s3,因此我们使用 aws sdk 下载文件。这是 URL https://docs.aws.amazon.com/AmazonS3/latest/dev/RetrievingObjectUsingJava.html
此代码无法正常工作,尽管它显示了确切的文件大小下载,因为上传文件丢失了一些信息。该代码还抱怨仍有待处理的字节。进行了一些更改以消除错误,但从未奏效。
我在这里找到的代码就像魔术一样工作
InputStream reader = new BufferedInputStream(
object.getObjectContent());
File file = new File("localFilename");
OutputStream writer = new BufferedOutputStream(new FileOutputStream(file));
int read = -1;
while ( ( read = reader.read() ) != -1 ) {
writer.write(read);
}
writer.flush();
writer.close();
reader.close();
此代码还使下载速度比我们以前的方法快得多。
解决方案
推荐阅读
- sql - 我想检查/计算两个列表是否至少有一个在 sql developer 中常见的元素
- python - Django CSP 允许来自域的 iframe,而无需为其他所有内容设置 CSP
- c++ - 无法创建图像位图c ++
- javascript - 火狐的图表
- xamarin.forms - 在 Xamarin 表单应用程序中添加注释
- python - 如何让 tf.Tensor 参与计算图?
- css - 将标题放在具有多个图像的部分上?
- c++ - 为什么我们不能在下面的代码中使用方括号?
- actions-on-google - 谷歌操作生成器/谷歌助手如何使用专有名词作为类型
- celery - celery 任务分配算法是什么?