尝试在 PutObjectCommand 上设置 header ContentDisposition 导致 403 forbidden
Trying to set header ContentDisposition on PutObjectCommand results in a 403 forbidden
我使用我的应用程序成功将文件上传到 S3。我使用我的服务器使用 aws-sdk v3.
为我生成的 signedUrl 从浏览器直接上传
得到烧焦的URL有点像这样
const s3Params = {
Bucket : bucketName,
Key : fileName,
ContentType:fileType,
// Metadata:{'Content-Disposition':'attachment'}
// ContentDisposition:'attachment'
};
try {
const command = new PutObjectCommand(s3Params);
const url = await getSignedUrl(s3v3,command,{expiresIn:60});
return url;
} catch (e) {
console.log('************** there was an error signing th url');
console.log(e);
throw e;
}
};
这工作得很好,但是当我阅读一些文档时,我看到我应该能够设置 header ContentDisposition。在this documentation it says that the input of PutObjectCommand extends from the PutObjectRequest
后者有一个名为 ContentDisposition
的可选参数,因为我想将其设置为附件,以允许我提示我的用户“下载”window。但是,当我如上所述使用签名 URL 但添加 ContentDisposition:'attachment'
字段时,我得到一个禁止错误。
有人知道我在这里是否遗漏了什么吗?这不是一个实际的选项,还是我需要为此修改我的 S3 权限中的某些内容?
我们必须为 PutObjectCommand
参数和 getSignedUrl
函数指定 ContentDisposition
:
async function main(fileName, bucketName, fileType) {
const s3Params = {
Bucket: bucketName,
Key: fileName,
ContentType: fileType,
ContentDisposition: 'attachment'
};
const client = new S3Client({region: 'us-east-1'});
const command = new PutObjectCommand(s3Params);
const url = await getSignedUrl(client, command, {expiresIn: 60, ContentDisposition: 'attachment'});
const file = await fs.readFile(fileName);
const result = await axios({
method: 'put',
url,
data: file,
headers: {
'Content-Type': fileType,
'Content-Disposition': 'attachment'
}
});
return result;
}
我使用我的应用程序成功将文件上传到 S3。我使用我的服务器使用 aws-sdk v3.
为我生成的 signedUrl 从浏览器直接上传得到烧焦的URL有点像这样
const s3Params = {
Bucket : bucketName,
Key : fileName,
ContentType:fileType,
// Metadata:{'Content-Disposition':'attachment'}
// ContentDisposition:'attachment'
};
try {
const command = new PutObjectCommand(s3Params);
const url = await getSignedUrl(s3v3,command,{expiresIn:60});
return url;
} catch (e) {
console.log('************** there was an error signing th url');
console.log(e);
throw e;
}
};
这工作得很好,但是当我阅读一些文档时,我看到我应该能够设置 header ContentDisposition。在this documentation it says that the input of PutObjectCommand extends from the PutObjectRequest
后者有一个名为 ContentDisposition
的可选参数,因为我想将其设置为附件,以允许我提示我的用户“下载”window。但是,当我如上所述使用签名 URL 但添加 ContentDisposition:'attachment'
字段时,我得到一个禁止错误。
有人知道我在这里是否遗漏了什么吗?这不是一个实际的选项,还是我需要为此修改我的 S3 权限中的某些内容?
我们必须为 PutObjectCommand
参数和 getSignedUrl
函数指定 ContentDisposition
:
async function main(fileName, bucketName, fileType) {
const s3Params = {
Bucket: bucketName,
Key: fileName,
ContentType: fileType,
ContentDisposition: 'attachment'
};
const client = new S3Client({region: 'us-east-1'});
const command = new PutObjectCommand(s3Params);
const url = await getSignedUrl(client, command, {expiresIn: 60, ContentDisposition: 'attachment'});
const file = await fs.readFile(fileName);
const result = await axios({
method: 'put',
url,
data: file,
headers: {
'Content-Type': fileType,
'Content-Disposition': 'attachment'
}
});
return result;
}