首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS S3:.csv文件被下载为.csv

AWS S3:.csv文件被下载为.csv
EN

Stack Overflow用户
提问于 2018-02-22 16:38:57
回答 3查看 9.9K关注 0票数 4

我有两个AWC帐户,每个帐户都有一个S3桶。我向每个.CSV桶上传了两个相同大小的S3文件。

当我尝试以下载下载为时,该文件将在第一个帐户中作为.CSV文件下载。但是(!)当我尝试从第二个帐户下载这个文件时,它是以.TXT的形式下载的。

怎么会发生这种事?这两个文件都是以相同的方式创建的:通过Redshift卸载查询,执行从Redshift到S3的选定数据的复制。

UPDATE可能是因为在这个文档的帐户中,**服务器端加密等于AWS?我注意到从.csv转换为.txt的文件具有“服务器端加密: AWS-KMS",而下载为.csv的.csv文件具有”服务器端加密:无“

更新:在不同的浏览器中尝试-相同的结果

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-22 17:40:59

检查AWS S3控制台中每个对象的标头,并比较内容类型值。Content-Type向web浏览器提供了关于对象包含哪些数据的提示。

如果Content-Type不存在或不包含text/csv,则在S3控制台或通过您喜爱的S3应用程序(如CloudBerry )中添加或修改标头。

票数 7
EN

Stack Overflow用户

发布于 2018-02-22 19:03:21

约翰说的Content-Type不是text/csv是对的。有时候,S3会把它做对了,有时它不会。如果你自己不能手动纠正这个错误,你可以运行一个Lambda函数来帮你每次上传一个新的对象。您可以使用Python2.7模板Lambda函数从桶中下载对象,为S3对象使用mimetypes库到guess_type,然后在同一个桶中重新上传文件。您需要通过S3对象上传触发这个函数,并给予它必要的权限(S3:GetObject)。

P.S. --这将适用于任何扩展名的文件。如果您知道只打算上载.csv文件,则可以忽略mimetype并直接将对象重新上传到

代码语言:javascript
复制
bucket.upload_fileobj(filename, key, ExtraArgs={'ContentType': 'text/csv'})

如果mimetype无法猜测类型,那么您可能需要添加这些类型,请看下面的示例type

祝好运!

票数 0
EN

Stack Overflow用户

发布于 2020-12-23 14:35:23

下面是scala解决方案(指定内容类型):

代码语言:javascript
复制
val settingsLine: String = "csvdata1,csvdata2,csvdata3"
val settingsStream: InputStream = new ByteArrayInputStream(settingsLine.getBytes())

val metadata: ObjectMetadata = new ObjectMetadata()
metadata.setContentType("text/csv")

s3Client.putObject(bucketName, prefix, settingsStream, metadata)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48932708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档