使用 Laravel 提供文件返回不可读或空文件

问题描述

我在 Laravel 中创建了包含以下代码的控制器

$doc = Document::find($id);
if (Storage::disk('local')->exists($doc->path)) {
      return Storage::disk('local')->get($doc->path);
}

在我的前端,我使用 javascript 通过以下代码以编程方式下载文件(可以使用 blob 还是有其他方法可以做到?)

async downloadDocument() {   
  DocService.downloadDoc(this.document.id).then((response) => {  // Service that handles ajax call
    const url = window.URL.createObjectURL(new Blob([response.data]));
    const link = document.createElement("a");
    link.href = url;
    link.setAttribute("download",this.document.name);
    document.body.appendChild(link);
    link.click();
    link.remove();
  });
},

我可以下载并查看 txt、PHP 文件内容,但是当我尝试下载图像时,下载了 pdf 等文件,但文件内容为空或不可读。

解决方法

改用带有正确标题的 download() 方法:

  A ->aB|a
   B ->bB|b 
  D->dd|dD

如果您想将文件作为原始文本发送给客户端并让它决定如何处理它:

return Storage::download($doc->path,basename($doc->path),[
    'Content-Description' => 'File Transfer','Content-Type' => mime_content_type($doc->path),]);