PHP - 从 AWS 存储桶下载的文件的文件编码问题

     2023-03-31     201

关键词:

【中文标题】PHP - 从 AWS 存储桶下载的文件的文件编码问题【英文标题】:PHP - file encoding issue with files downloaded from AWS bucket 【发布时间】:2016-05-30 09:54:24 【问题描述】:

在 PHP 中使用以下代码,我正在尝试从 AWS 存储桶下载文件。 我能够成功下载文件,但下载的文件不可读。文件编码设置为 ANSI。

在 AWS 存储桶中,该文件的元数据如下 内容类型:文本/csv;%20charset=utf-16le 内容编码:gzip



    require '/aws/aws-autoloader.php'; 
    use Aws\S3\S3Client;

    // Instantiate the S3 client with your AWS credentials
    $key = [access_key];
    $secret = [secret_key];

    $client = S3Client::factory(array(
        'credentials' => array(
            'key'    => $key,
            'secret' => $secret
        )
    ));


    $bucket = [bucket_name];
    $file=[bucket_file_location];
    $fileSaveAs = [download_file_location];

    // Get an object using the getObject operation & download file
    $result = $client->getObject(array(
        'Bucket' => $bucket,
        'Key'    => $file,
        'SaveAs' => $fileSaveAs
    ));

谁能解释一下,这里出了什么问题?

编辑 1: 当我直接从 AWS 存储桶下载此文件时,它下载得很好。

编辑 2: 我刚刚注意到下载的 CSV 文件总是 1KB 大小。

下载的文件损坏模式: `‹½”ÍJÃ@F¿µOÑPi+h]V[Tð§hâFÚ4HÐjI¬Ð—W¿¤

编辑 3: 所有这些文件都是使用 gsutil 从 Google play bucket 传输的

【问题讨论】:

您获得的内容可能已被压缩(如Content-Encoding 中所述)? gzdecode(file_get_contents($fileSaveAs)) 是否返回正确的内容? 是的,这解决了我的问题 【参考方案1】:

从 AWS 存储桶接收的文件是 gzip。 (内容编码:gzip)

所以需要使用gzdecode函数解码gzip压缩字符串

以下代码解决问题



    $content = gzdecode(file_get_contents($fileSaveAs));
    file_put_contents($fileSaveAs,$content);

【讨论】:

@Zudwa:感谢您的解决方案

Spring Boot Amazon AWS S3 存储桶文件下载 - 拒绝访问

】SpringBootAmazonAWSS3存储桶文件下载-拒绝访问【英文标题】:SpringBootAmazonAWSS3BucketFileDownload-AccessDenied【发布时间】:2016-07-2523:34:49【问题描述】:我有一个自动配置的AWS、SpringBoot应用程序,并且我正在尝试设置一个端点,该端点... 查看详情

将文件从 Mac (iCloud) 保存到 S3 存储桶 (AWS) 的脚本

】将文件从Mac(iCloud)保存到S3存储桶(AWS)的脚本【英文标题】:ScripttosavefilesfromMac(iCloud)toS3bucket(AWS)【发布时间】:2020-10-2402:27:23【问题描述】:所以我想首先我们需要编写一个脚本来保存我的iCloud中的所有文件,我想我们必须为... 查看详情

从 AWS S3 存储桶访问文件

】从AWSS3存储桶访问文件【英文标题】:AccessingfilesfromAWSS3Bucket【发布时间】:2020-06-1523:12:51【问题描述】:我正在使用NodeJS将文件上传到我的S3存储桶中。作为回应,我收到了该文件的链接。例如我收到https://my-bucket-name.s3.ap-sout... 查看详情

从客户端下载 AWS S3 文件

...7:39:57【问题描述】:我目前正在尝试使用前端的按钮从s3存储桶下载文件。怎么可能做到这一点?我不知道如何开始这件事。我已经尝试过研究和研究,但没有运气-我搜索的只是UPLOADING文件到s3存储桶,而不是DOWNLOADING文件。提... 查看详情

使用 Node 将文件从一个 AWS S3 存储桶复制到另一个存储桶

】使用Node将文件从一个AWSS3存储桶复制到另一个存储桶【英文标题】:CopyfilefromoneAWSS3BuckettoanotherbucketwithNode【发布时间】:2018-11-2216:49:54【问题描述】:我正在尝试使用Node.js将文件从AWSS3存储桶复制到另一个存储桶。问题是如... 查看详情

从私有 AWS S3 存储桶在 Flask 中提供静态文件

】从私有AWSS3存储桶在Flask中提供静态文件【英文标题】:ServestaticfilesinFlaskfromprivateAWSS3bucket【发布时间】:2019-02-1921:59:35【问题描述】:我正在开发一个在Heroku上运行的Flask应用程序,它允许用户上传图像。该应用有一个在表格... 查看详情

AWS 同步文件夹

...必须遵循的工作流程-从一个端点获取数据,同步到我的存储桶处理数据删除数据第二天重复这个过程所以,我必须从另一个AWS存储桶同步AWS存储桶中的一个文件夹。我必须每天只将一天的文件放入我的存储桶中。但是当我运行... 查看详情

AWS:无法使用流从 SSE-KMS 加密存储桶下载文件

】AWS:无法使用流从SSE-KMS加密存储桶下载文件【英文标题】:AWS:CannotdownloadfilefromSSE-KMSencryptedbucketusingstream【发布时间】:2021-03-2808:58:13【问题描述】:我有一个配置了启用加密的存储桶:加密密钥类型:AWSKeyManagementService密钥(... 查看详情

使用带有 Node.js 的 AWS Lambda 函数从 S3 存储桶中提取 zip 文件并上传到另一个存储桶

】使用带有Node.js的AWSLambda函数从S3存储桶中提取zip文件并上传到另一个存储桶【英文标题】:ExtractzipfilefromS3bucketwithAWSLambdafunctionwithNode.jsanduploadtoanotherbucket【发布时间】:2017-04-2914:03:39【问题描述】:我正在和AWSLambda一起玩Node.... 查看详情

在 Elastic Beanstalk Aws React Django 上托管站点时如何从单独的 S3 存储桶加载静态文件

】在ElasticBeanstalkAwsReactDjango上托管站点时如何从单独的S3存储桶加载静态文件【英文标题】:HowtoloadstaticfilesfromseparateS3bucketwhenhostingsiteonElasticBeanstalkAwsReactDjango【发布时间】:2020-09-2215:12:54【问题描述】:设置:React+Django托管在E... 查看详情

直接从服务器将 csv 文件上传到 aws s3 存储桶

】直接从服务器将csv文件上传到awss3存储桶【英文标题】:Uploadcsvfiletoawss3bucketdirectlyfromaserver【发布时间】:2019-10-2308:58:24【问题描述】:祝大家周末愉快我正在处理一项从API获取数据然后将它们存储到csv文件然后从那里直接上... 查看详情

使用 boto3 lib 和 AWS Lambda 从 S3 存储桶中的压缩文件中获取数据流

】使用boto3lib和AWSLambda从S3存储桶中的压缩文件中获取数据流【英文标题】:GettingadatastreamfromazippedfilesittinginaS3bucketusingboto3libandAWSLambda【发布时间】:2018-02-1323:08:13【问题描述】:我正在尝试为我的chron作业创建一个无服务器处... 查看详情

从带有文件系统的 AWS S3 下载的 Laravel 文件已损坏

...,当我下载文件损坏时,上传过程效果很好。我已经从S3存储桶手动下载了文件,这样文件就不会损坏,所以我认为问题不在于上传。我正 查看详情

输出文件未保存在我的存储桶中,在 AWS s3 中

】输出文件未保存在我的存储桶中,在AWSs3中【英文标题】:outputfilenotsavedonmybucket,inAWSs3【发布时间】:2017-01-2415:54:11【问题描述】:我正在尝试从AWS学习本教程。我在快速示例步骤。https://aws.amazon.com/blogs/big-data/submitting-user-appl... 查看详情

从 S3 存储桶读取的 AWS Glue 限制数据

】从S3存储桶读取的AWSGlue限制数据【英文标题】:AWSGlueLimitdatareadfromS3Bucket【发布时间】:2021-03-3010:52:38【问题描述】:我有一个包含超过600万个文件的大存储桶。我遇到了这个错误FailedtosanitizeXMLdocumentdestinedforhandlerclass,我认... 查看详情

如何使用 gsutil 通过 http 链接从谷歌云存储下载到 AWS 实例或 s3 存储桶?

】如何使用gsutil通过http链接从谷歌云存储下载到AWS实例或s3存储桶?【英文标题】:HowtousegsutiltodownloadfromgooglecloudstoragetoAWSinstanceors3bucketwithahttplink?【发布时间】:2021-02-0221:21:30【问题描述】:我有一个谷歌云存储下载http链接,... 查看详情

AWS Redshift:从 S3 上的许多存储桶加载数据

】AWSRedshift:从S3上的许多存储桶加载数据【英文标题】:AWSRedshift:LoaddatafrommanybucketsonS3【发布时间】:2017-03-0213:43:07【问题描述】:我正在尝试将数据从S3上的两个不同存储桶加载到Redshift表。每个bucket中都有名称中带有日期的... 查看详情

AWS S3 文件上传但存储桶中的文件没有大小?

】AWSS3文件上传但存储桶中的文件没有大小?【英文标题】:AWSS3fileuploadsbutfilesinbuckethasnosize?【发布时间】:2020-05-2019:43:38【问题描述】:大家好。我想将多个图像文件上传到我的S3存储桶,我能够做到这一点。将文件上传到我... 查看详情