第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Golang如何在用戶完成下載后刪除生成的zip文件?

Golang如何在用戶完成下載后刪除生成的zip文件?

Go
元芳怎么了 2021-06-30 17:11:19
我正在使用beego開發(fā)一個(gè)網(wǎng)站我正在生成一個(gè) zip 文件,讓用戶從我的網(wǎng)站下載。但是,我不知道何時(shí)刪除該文件。有沒有辦法讓我知道用戶是否已完成下載 zip 文件,以便我可以從磁盤中刪除它?或者,我可以即時(shí)生成 zip 文件并將 *zip.File 傳遞到 net/http 嗎?我看到http.ServeFile()接受 ReadSeeker,但我認(rèn)為 zip.FileReadSeeker根據(jù)文檔不滿足接口。有沒有什么好方法可以根據(jù)我的情況刪除文件?
查看完整描述

3 回答

?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

我只是在添加代碼。


return middleware.ResponderFunc(func(w http.ResponseWriter, r runtime.Producer) {

        fn := filepath.Base(filePath)

        w.Header().Set("Content-Type", "application/octet-stream")

        w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%q", fn))

        io.Copy(w, file)

        defer os.Remove(filePath) // Path to file you've downloaded.

        file.Close()

    })


查看完整回答
反對(duì) 回復(fù) 2021-07-12
?
翻翻過去那場(chǎng)雪

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊

您需要defer os.Remove(zf)在請(qǐng)求處理程序中的某個(gè)位置。用戶下載文件與任何其他請(qǐng)求沒有什么不同:當(dāng)請(qǐng)求處理程序完成執(zhí)行時(shí),您就知道您已經(jīng)完成了。

這仍然會(huì)在磁盤上留下偶爾的 zip 文件(例如,如果您的服務(wù)器崩潰、重新啟動(dòng)或以其他方式中斷),因此您將需要一個(gè) cron 作業(yè)或類似的工作來定期運(yùn)行以刪除舊文件。

如果您可以一致地重新生成 zip 文件,則可以使用 http.ServeContent 動(dòng)態(tài)生成 zip 文件(例如,這將要求您的基礎(chǔ)數(shù)據(jù)保持不變或版本化)。您可以通過Seek在 zip 之上編寫自己的代碼來完成此操作,該zip 始終會(huì)重置 zip 流并向前跳過 n 個(gè)字節(jié)。如果有很多搜索,這將是非常低效的,但是您可以拒絕接受范圍,然后就會(huì)有兩個(gè)搜索:一個(gè)到文件末尾,另一個(gè)回到開頭(完成以計(jì)算長(zhǎng)度) .

另一種避免磁盤文件的簡(jiǎn)單方法是在內(nèi)存中生成 zip 文件,然后使用 strings.Reader 通過 http.ServeContent 為其提供服務(wù)。但是,使用此解決方案管理服務(wù)器中的內(nèi)存使用會(huì)很困難。


查看完整回答
反對(duì) 回復(fù) 2021-07-12
  • 3 回答
  • 0 關(guān)注
  • 572 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)