我们将内容上传到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;
}
}
由于
答案 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);