首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ThinkPHP Upload 上傳後如何提供下載:獨立下載動作與路由設定

     編輯:程式設計綜合問答

核心概念

上傳 (Upload) 與下載是**兩個獨立動作**。上傳儲存檔案至伺服器磁碟 (或雲端),下載則由控制器讀取檔案串流輸出至瀏覽器。

實作步驟

  1. 上傳完成記錄資訊:將檔案路徑、原始檔名、儲存檔名、MIME 類型寫入資料表 (attachment)。
  2. 建立下載路由/控制器:
    public function download($id) {
        $file = Db::name('attachment')->find($id);
        if (!$file) $this->error('檔案不存在');
        $path = $file['save_path'] . $file['save_name'];
        if (!is_file($path)) $this->error('實體檔案遺失');
        // 設定標頭強制下載
        header('Content-Type: ' . $file['mime']);
        header('Content-Disposition: attachment; filename="' . $file['original_name'] . '"');
        header('Content-Length: ' . filesize($path));
        readfile($path);
        exit;
    }
    
  3. 前端連結:<a href="/download/123">下載附件</a>。

注意事項

  • 大檔案建議用 X-Sendfile (Nginx/Apache 模組) 或分塊輸出,避免記憶體耗盡。
  • 權限控管:下載前檢查使用者是否有權存取該附件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved