2

我将 pdf 上传到 s3 并使用签名的 url。将 amazonHeaders 传递给内容处置(我正在取回内容处置的响应标头)。为此,我在 KNOX 的 client.js 中添加了一个补丁

var signature = auth.signQuery({
        amazonHeaders: options && options.headers,
        secret: this.secret,
        date: epoch,
        resource: resource,
        verb: (options && options.verb) || 'GET',
        contentType: options && options.contentType,
        token: this.token,
    });

并传递 options.headers

headers = "response-content-disposition:attachment; filename=#{file._id}"

但我无法在 IE 中打开它,我可以在 chrome 中打开它。

我不知道我是否真的需要 content-disposition 标头。因为当我从本地主机/快递 nodejs server.it 尝试时,它会发送相同的响应。它在 IE 中自动打开。

本地主机

这是来自 Amazon/S3 的响应

在此处输入图像描述

4

1 回答 1

1

您的屏幕截图中的响应标头未显示 Content-Disposition 标头,因此该部分无法正常工作-但我不知道这是否是您的 IE 问题。

如果你确实想拥有Content-Disposition: attachment

您无需(不再)修改 knox 即可添加自定义响应标头。你可以做:

var headers = { 'response-content-disposition': 'attachment;filename=test.pdf'};
var expires = new Date(); expires.setYear(2020);
var url = client.signedUrl('/test.pdf', expires, { qs: headers });

这给了我一个类似https://mikie-knox-test.s3-eu-west-1.amazonaws.com/test.pdf?Expires=1594497470&AWSAccessKeyId=AKIAIW2ON37WUIIUJ2NA&Signature=fUQyOmYuPM2dEMPTY%2FRkssK0oxw%3D&response-content-disposition=attachment%的网址3B 文件名%3Dtest.pdf

(我不认为你想要#{file._id}你的代码,这看起来像是一个复制粘贴错误,来自 ruby​​ 源)。

于 2014-07-11T20:00:23.793 回答