AWS为S3存储桶中的分配预分配了URL

时间:2017-02-16 03:51:27

标签: php amazon-web-services amazon-s3

我们将内容上传到S3私人桶。上传内容后,我们通过预先签名的URL访问它们。 MP4,当我们通过浏览器访问该URL时,图像正常工作。但是当我们尝试访问SWF和PDF时,浏览器会提示下载内容。 当我们尝试从公共桶中访问资产时也不会发生这种情况。

是默认行为还是有任何解决方案?

我查看doc

获取网址的代码

    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的'上传'功能上传swfs,pdfs以及mp4s。

    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;
    }
}

由于

2 个答案:

答案 0 :(得分:1)

上传文件时,如果没有设置,S3 Client将尝试确定正确的内容类型。 如果没有提供内容类型且无法通过文件名确定,则将使用默认内容类型module.exports = { devtool: 'eval', entry: [ 'webpack-dev-server/client?http://localhost:3000', 'webpack/hot/only-dev-server', 'babel-polyfill', './app/index', ], resolve: { extensions: ['', '.js'] }, output: { path: path.join(__dirname, 'public'), filename: 'bundle.js', publicPath: '/public/' }, plugins: [ new webpack.HotModuleReplacementPlugin(), new ExtractTextPlugin('public/app.css'), new DashboardPlugin(dashboard.setData) ], module: { loaders: [{ test: /\.js$/, loaders: ['react-hot', 'babel'], include: path.join(__dirname, '..', 'app') }, // JSON { test: /\.json$/, loaders: ['json-loader'] }, // Img { test : /\.(png|jpg|svg|eot|ttf|woff|raw)$/, loader: 'url-loader?limit=4096' }, // Sass { test: /\.scss$/, loaders: [ 'style', 'css?sourceMap', 'postcss', 'sass?sourceMap' ] }] }, postcss: [autoprefixer({ browsers: ['last 2 versions'] })], } ,因此浏览器会提示您下载文件。

查看http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html

"application/octet-stream"

答案 1 :(得分:0)

正如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);