在使用 laravel 開發時,我們可能會遇到下載功能不能夠正確處理中文文件名的問題。這個問題主要是由于在文件名中包含有中文字符所導致的。要解決這個問題,我們需要對文件名進行 url 編碼。
在 php 中,可以使用 urlencode() 函數來對文件名進行編碼。但是,在 Laravel 中我們可以使用內置的 Str::slug() 方法來完成這個任務。
Str::slug() 方法可以將一個字符串轉化為 URL 友好的 “slug” 格式。但是,我們可以選擇不傳入第二個參數,以保留原有字符,只進行 URL 編碼。
下面是一個示例代碼:
public function downloadFile($filename) { $fullPath = storage_path('app/download/' . $filename); $headers = [ 'Content-Type' => 'application/octet-stream', ]; $escapedFilename = Str::slug($filename, ''); return response()->download($fullPath, $escapedFilename, $headers); }
在上面的代碼中,我們使用了 Str::slug() 方法將文件名進行了編碼,并將編碼后的字符串作為第二個參數傳遞給 download() 方法。
通過這種方式,我們可以確保 Laravel 在處理下載文件時能夠正確處理包含中文字符的文件名。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END