[英]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.