繁体   English   中英

使用AWS SDK for PHP上传的Amazon S3文件始终是“application / octet-stream”?

[英]Amazon S3 files uploaded using AWS SDK for PHP is always “application/octet-stream”?

根据文档contentType是可选的, 它将尝试根据文件扩展名确定正确的mime类型 但是,它似乎永远不会猜测mime类型,并且始终默认为application / octet-stream

这是我的代码:

$s3 = new AmazonS3();

$opt = array(   'fileUpload'    => $_FILES['file']['tmp_name'],
                'storage'       => Amazons3::STORAGE_REDUCED);

$r = $s3->create_object('mybucket', $_FILES['file']['name'], $opt);

这是我的AWS控制台的屏幕截图:

在此输入图像描述

如何在不设置contentType选项的情况下实际自动设置正确的内容类型,或者您是否真的需要手动设置?

附加信息:如果我从控制台下载文件(我最初通过SDK上传),然后使用控制台再次上传,则设置正确的Content-Type(例如:图像/ gif用于GIF文件而不是application / octet-stream )

尝试在创建对象时将“contentType”键添加到options数组,并使用“body”而不是“fileUpload”。 例如:

$s3->create_object('MY_BUCKET', 'xml_file.xml', array(
                                        'body' => '<xml>Valid xml content</xml>',
                                        'contentType' => 'text/xml'
                                    ));

使用text / xml内容类型成功创建文件。 据我所知,通过SDK上传时不会自动设置Content-Type。 但是从PHP端发出mime类型并设置'contentType'属性的问题是什么?

我刚刚遇到这种情况,在上传某些文件时,没有自动检测到Content-Type。 在看完SDK执行的代码之前,我无法弄清楚原因是什么。 我发现CFMimeTypes :: get_mimetype()函数用于自动确定Content-Type,它使用区分大小写的比较来确定MIME类型。 因此,只有小写扩展名才匹配。 如果您的文件扩展名为大写或大小写,则它将不匹配并回退到'application / octet-stream'MIME类型。

要修改更改行:

'fileUpload'    => $_FILES['file']['tmp_name']

'fileUpload'    => strtolower( $_FILES['file']['tmp_name'] )

我使用的是SDK v 1.5.8.2,但是在1.5.9或1.5.10版本中,这两个版本都没有在过去一周内发生任何变化。 我认为这是一个错误,并将提交它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM