亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

HTML5 下載屬性不適用于 301 永久移動

HTML5 下載屬性不適用于 301 永久移動

萬千封印 2022-10-13 15:44:56
我正在嘗試使用 301 Moved Permanently 從 URL 自動下載文件,如下所示:<a href="myserverapi/download?fileId=123" download="image.jpg" target="_blank">Download</a>但它不會自動下載圖像。相反,它只在新選項卡上顯示圖像,而不是提供文件作為下載。請建議任何其他方式
查看完整描述

4 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

正如你在評論中所說,

端點只是將 (301) 重定向到圖像的 URL (someurl.com/image.jpg)

問題出在您的端點myserverapi/download?fileId=123上。因為端點會重定向您而不是提供請求的文件。這意味著由于某種原因,該 URL 不允許您訪問該文件。

也許,您使用的是Temporary URL,所以它301 error在過期后拋出。因此,您的 HTML 代碼沒有任何問題!


查看完整回答
反對 回復 2022-10-13
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

您可以考慮只更改響應標頭,而不是使用download標記中的屬性。

在服務器的響應中,如果您將Content-Disposition標頭設置為attachment,就像@BadPiggie說的那樣,那么圖像文件將下載而不是顯示。

如果您選擇像這樣使用此標頭,那么download我相信不需要該屬性。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition


查看完整回答
反對 回復 2022-10-13
?
侃侃無極

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


查看完整回答
反對 回復 2022-10-13
?
皈依舞

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);

這將觸發下載圖像而不打開它


查看完整回答
反對 回復 2022-10-13
  • 4 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號