4 回答
TA贡献1856条经验 获得超11个赞
正如你在评论中所说,
端点只是将 (301) 重定向到图像的 URL (someurl.com/image.jpg)
问题出在您的端点myserverapi/download?fileId=123
上。因为端点会重定向您而不是提供请求的文件。这意味着由于某种原因,该 URL 不允许您访问该文件。
也许,您使用的是Temporary URL,所以它301 error
在过期后抛出。因此,您的 HTML 代码没有任何问题!
TA贡献1785条经验 获得超4个赞
您可以考虑只更改响应标头,而不是使用download
标记中的属性。
在服务器的响应中,如果您将Content-Disposition
标头设置为attachment
,就像@BadPiggie说的那样,那么图像文件将下载而不是显示。
如果您选择像这样使用此标头,那么download
我相信不需要该属性。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
TA贡献2051条经验 获得超10个赞
假设问题是处理同源链接,则此行为的一个可能原因是较旧的 Firefox 版本没有实现跨重定向传播文件名 - 该功能似乎已添加在 v78 和 v91 之间的某个位置,这很可能一直在问这个问题之后。
在 v91 中,此块存在于HttpBaseChannel::SetupReplacementChannel函数中:
if (sameOriginWithOriginalUri) {
newChannel->SetContentDisposition(mContentDispositionHint);
if (mContentDispositionFilename) {
newChannel->SetContentDispositionFilename(*mContentDispositionFilename);
}
}
(在https://searchfox.org/mozilla-esr91/source/netwerk/protocol/http/HttpBaseChannel.cpp#4414)
请注意,在较早阶段mContentDispositionFilename分配了属性值。download='...'
但是在 v78 中没有此代码 - 请参阅https://searchfox.org/mozilla-esr78/source/netwerk/protocol/http/HttpBaseChannel.cpp#4098
TA贡献1851条经验 获得超3个赞
如果您有图像的完整路径,您可以使用一些服务器端脚本,重定向到此页面并从那里下载
$filename = "https://developers.google.com/homepage-assets/images/chromeos-logo.png";
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename. '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
readfile($filename);
这将触发下载图像而不打开它
添加回答
举报