Php AWS为S3存储桶中的资产预先指定的url
我们将内容上传到S3私有bucket。上传内容后,我们通过预先签名的url访问它们。当我们通过浏览器访问url时,图像工作正常。但当我们尝试访问主权财富基金和PDF时,浏览器会提示下载内容。 当我们试图从公共存储桶访问资产时,也不会发生这种情况 这是默认行为还是有解决方案 我查一下 获取url的代码Php AWS为S3存储桶中的资产预先指定的url,php,amazon-web-services,amazon-s3,Php,Amazon Web Services,Amazon S3,我们将内容上传到S3私有bucket。上传内容后,我们通过预先签名的url访问它们。当我们通过浏览器访问url时,图像工作正常。但当我们尝试访问主权财富基金和PDF时,浏览器会提示下载内容。 当我们试图从公共存储桶访问资产时,也不会发生这种情况 这是默认行为还是有解决方案 我查一下 获取url的代码 public function getPresignedUrl($filename, $expires,$bucket=NULL) { if($bucket==NULL){
public function getPresignedUrl($filename, $expires,$bucket=NULL)
{
if($bucket==NULL){
$bucket=$this->bucket;
}
$command = $this->getClient()->getCommand('GetObject', ['Bucket' =>$bucket , 'Key' => $filename]);
$request = $this->getClient()->createPresignedRequest($command, $expires);
return (string) $request->getUri();
}
===========================================更新1=================================
我们使用AWS sdk的“上传”功能来上传SWF、PDF和MP4
public function upload($filename, $source, $acl = null, array $options = [])
{
if($this->getClient()->upload(
$this->bucket,
$filename,
$source,
!empty($acl) ? $acl : $this->defaultAcl,
$options
)){
return true;
}else{
return false;
}
}
谢谢上传文件时,如果未设置内容类型,S3客户端将尝试确定正确的内容类型。 如果未提供任何内容类型且无法通过文件名确定,则将使用默认的内容类型,
“应用程序/八位字节流”
,从而浏览器提示您下载该文件
看看
正如Vamsi所说,我上传mime类型的内容已经解决了我的问题
public function uploadPut($filename, $source, $acl = null,$mime=null,$storage='REDUCED_REDUNDANCY', array $options = []){
$result = $this->getClient()->putObject(array(
'Bucket' => $this->bucket,
'Key' => $filename,
'SourceFile' => $source,
'ContentType' => $mime,
'ACL' => $acl,
'StorageClass' => $storage,
));
}
调用函数
uploadPut($file->name, $file->name, null, $file->mimeType);
谢谢我会检查这个并让你知道。我已经更新了问题。我们正在使用AWS sdk的上传功能。该函数中没有涉及mime类型,但put函数接受mime类型
uploadPut($file->name, $file->name, null, $file->mimeType);