如果意味着文件駐留在第三方服務器上(無需事先下載或流式傳輸),如何將文件作爲附件發送到瀏覽器?將文件作爲附件發送到瀏覽器
回答
如果你想提供定期瀏覽器(圖像,HTML,...)處理的文件,你將不得不增加一個頭的東西,如改變MIME類型:
header("Content-Type: application/force-download; name=filename");
如果您沒有訪問第三方服務器,你別無選擇,只能通過附加標題
更好地使用* application/octet-stream *。 – Gumbo 2011-04-12 20:58:26
http://php.net/manual/en/function.header.php#example-3655
下載該文件自己把它提供給用戶如果您希望提示用戶保存要發送的數據(如生成的PDF文件),則可以使用»Content-Disposition標題提供建議的文件名並強制瀏覽器顯示保存對話框。
<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');
?>
這將發送一個本地存儲的文件,請重新閱讀手頭的問題。 – RobertPitt 2011-04-12 21:04:57
從另一臺服務器,而無需下載到您的服務器:
header('Location: http://thirdparty.com/file.ext');
,而無需下載文件在本地您沒有授權在外部服務器,所以你必須告訴瀏覽器做什麼,因此重定向頭,它會告訴服務器直接去提供的URL,從而加載下載。
從你的服務器,你會怎麼做:
if (file_exists($file))
{
if(false !== ($handler = fopen($file, 'r')))
{
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file)); //Remove
//Send the content in chunks
while(false !== ($chunk = fread($handler,4096)))
{
echo $chunk;
}
}
exit;
}
echo "<h1>Content error</h1><p>The file does not exist!</p>";
fopen需要2個參數,第二個應該是模式,在這種情況下,讀取 – 2013-04-09 18:51:24
fopen + fread的「r」不是一個好方法 - 太慢。 在標題後面使用readfile($ file)加快速度。 – Asaelko 2016-04-27 13:01:36
正如其他人所說,你必須設置響應文件的內容處置頭下載請求。但是,您已經在第三方服務器上說過該文件。除非您可以控制該服務器發送文件的方式,否則無法更改瀏覽器從該服務器檢索的方式。
但是,您可以代理該文件,以便服務器下載該文件,然後使用相應的標頭將其傳遞到客戶端。這意味着你的帶寬賬單增加了一倍,因爲你不得不同時下載文件並上傳。
他沒有事先下載或流式傳輸。 – RobertPitt 2011-04-12 21:04:15
@RobertPitt:魔術呢? – drudge 2011-04-12 21:30:12
不完全相同,使用重定向功能會創建文件從服務器下載的錯覺。 – RobertPitt 2011-04-12 21:31:51
只是爲那些在包含空格的名稱上遇到問題的人提供一個說明(例如「test test.pdf」)。
在示例中(99%的時間),您可以找到 header('Content-Disposition:attachment; filename ='。basename($ file));但是設置文件名的正確方法是引用它(雙引號): header('Content-Disposition:attachment; filename =''。basename($ file)。''')
一些瀏覽器可以工作,沒有報價,但肯定不是Firefox和Mozilla的解釋,在內容配置文件名的報價是根據RFC http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download
- 1. 作爲附件在瀏覽器中發送圖像
- 2. 發送流方式瀏覽器作爲附件在MVC 2
- 3. 如何強制sevlet發送字符串作爲附件到瀏覽器?
- 4. 如何將文本文件按行發送到瀏覽器行
- 5. 如何使用PHP將字符串作爲文件發送到瀏覽器?
- 6. 作爲附件發送多個文件
- 7. 發送csv文件作爲附件
- 8. Apache設置將gzip CSS/JS文件發送到瀏覽器
- 9. Rails:send_data()需要120秒將小文件發送到瀏覽器
- 10. 未將PHP頭文件發送到瀏覽器
- 11. 將Backbone.js模型的BASE64文件發送到瀏覽器
- 12. 使用Qt瀏覽器下載excel文件作爲附件
- 13. 如何將文件附件拖放到瀏覽器中?
- 14. 無法找到文件作爲附件發送文件在python
- 15. 如何使用ASP.NET MVC控制器操作將文件發送到瀏覽器?
- 16. 將上傳的文件作爲電子郵件附件發送
- 17. 如何將filepicker url文件作爲附件發送郵件?
- 18. 將.zip文件作爲電子郵件附件發送至Rails
- 19. 發送pdf作爲附件導致Chrome瀏覽器中的未定義錯誤
- 20. 將hude csv文件直接發送到瀏覽器輸出不起作用
- 21. 發送Word文檔作爲附件
- 22. Ckeditor 4文件瀏覽器併發送到服務器按鈕
- 23. 發送文件從AP服務器的NodeJS到瀏覽器
- 24. 將pdf從wp_remote_get發送到瀏覽器
- 25. 如何將pdf作爲電子郵件附件發送到Django
- 26. 是否可以將文件作爲iMessage附件發送?
- 27. 將Excel文件作爲附件發送時出錯
- 28. 發送PDF格式的瀏覽器(如附件)
- 29. 發送文本到瀏覽器
- 30. 爲什麼瀏覽器發送靜態文件請求?
有沒有辦法來實現這一目標。您對處理遠程資源沒有影響。而HTTP客戶端不支持'message/external-body'有效載荷。 – mario 2011-04-12 21:08:42