Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 上传/下载到S3或从S3下载的对象的奇怪mime类型_Python_Node.js_Amazon Web Services_Amazon S3_Aws Lambda - Fatal编程技术网

Python 上传/下载到S3或从S3下载的对象的奇怪mime类型

Python 上传/下载到S3或从S3下载的对象的奇怪mime类型,python,node.js,amazon-web-services,amazon-s3,aws-lambda,Python,Node.js,Amazon Web Services,Amazon S3,Aws Lambda,我正在开发一个Lambda,它获取csv.gz文件,解压它们并将它们上传到S3存储桶。一切都很好,但当我试图下载文件时,它们搞乱了mime类型,不管是否在S3对象元数据中设置 例如,对于元数据等于的对象: 内容类型=文本/csv 内容编码=utf-8 运行file-i test.csv命令后,下载的文件返回以下内容: test.csv:application/x-gzip;字符集=二进制 正如你们所看到的,和bucket中指定的完全不同 我尝试在Node和Python中实现我的脚本,都指

我正在开发一个Lambda,它获取csv.gz文件,解压它们并将它们上传到S3存储桶。一切都很好,但当我试图下载文件时,它们搞乱了mime类型,不管是否在S3对象元数据中设置

例如,对于元数据等于的对象:

内容类型=文本/csv
内容编码=utf-8

运行
file-i test.csv
命令后,下载的文件返回以下内容:

test.csv:application/x-gzip;字符集=二进制

正如你们所看到的,和bucket中指定的完全不同

我尝试在Node和Python中实现我的脚本,都指定元数据并跳过它们,但都有相同的问题,我不知道是什么导致了这种行为。如果您能提供任何有关问题原因的提示或想法,我将不胜感激


关于

您是否检查了文件是否真的解压缩了?你能像普通文本文件一样查看它吗?是的,我可以用csv打开它,例如使用LibreOffice Calc或Python脚本,但是如果我尝试用Google Sheets打开它,它就不能正常工作。如果
文件
实用程序检测到内容为
应用程序/x-gzip;charset=binary
则显示的对象的
内容类型:text/csv
实际上可能是正确的,但
内容编码
是错误的。它应该存储为
内容编码:gzip
utf8
不是
内容编码头的有效值。唯一有效的值是
gzip
compress
deflate
br
identity
<代码>内容编码:标识
相当于完全不存在标题。但是,如果要解压缩gz文件,则需要对结果使用
文件
,而不是源代码。感谢@Michael sqlbot对内容编码的解释。我不确定我是否理解第二部分-将
文件-I
应用于未压缩的.gz文件,该文件可以在例如LibreOffice中查看。如果
文件-I
返回
应用程序/x-gzip;charset=binary
在一个您认为已经解压缩的文件上,或者您实际上没有解压缩它,或者当您最初得到该文件时,该文件实际上被压缩了两次,所以您将外层而不是内层解压。。。这对于那些寻找文件来源的人来说是错误的,但并非不可能做到。