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);
這將觸發下載圖像而不打開它
添加回答
舉報