提供的檔案下載介面,設定了Content-Disposition 為 attachment,檔案是分段讀取流式回傳的,對于大檔案,在下載程序中,如果拿一個小檔案用cp命令覆寫了原檔案,會導致下載直接中斷,瀏覽器也不會報錯,下載下來的就是一個不完整的檔案。有什么辦法規避嗎,或者給瀏覽器的下載器回傳一個檔案不存在的錯誤
uj5u.com熱心網友回復:
一個問題,你為啥用cp命令覆寫原來的檔案?
uj5u.com熱心網友回復:
需求需要考慮各種極端場景,在檔案下載的程序中對原檔案進行 cp mv rm 后是否還能正常下載。
uj5u.com熱心網友回復:

大概就是要得到這種效果。回應頭要設定些什么才能讓瀏覽器認為下載失敗。
這個我是測驗的s3的物件外鏈下載,用不同的瀏覽器有不同的效果,用谷歌的時候,即使洗掉了物件,仍然能下載成功,用360測驗的時候洗掉物件后馬上就停止了,然后報錯。
uj5u.com熱心網友回復:
你說的其實是資料同步問題.存盤位置A和存盤位置B
B提供現在,A用來實時更新,
每天午夜后A同步到B
網頁上寫一句,每天幾點更新資料,不就解決了?
uj5u.com熱心網友回復:
360能識別說明只是瀏覽器本身的功能uj5u.com熱心網友回復:
不是資料同步,就假設只有一份資料,a用戶在下載,b用戶正好在洗掉,或者覆寫等操作。
我查了一下 rm mv cp 三者之間的區別,rm實際上只是刪了一個參考,如果有行程占用,會直到行程占用結束才會真正洗掉,mv 覆寫原檔案在相同檔案系統下,也類似于對原檔案執行了rm,至于cp,原理是把檔案指標移到頭部,然后用新資料覆寫舊資料。因為讀取檔案是分段讀取,一個2G的檔案,在讀取到1G的時候,如果用一個20k的檔案覆寫,那在繼續讀取后面的資料的時候就為空了,讀取檔案的流程就結束了,就會導致瀏覽器提前結束結束下載,下載下來的是一個不完整的檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/37182.html
標籤:應用服務器
上一篇:2019大廠面試題,據說90%的人當場沒寫對,30%寫出思路得了部分分數
下一篇:PHP初學者遇到問題求解答
