使用查询字符串时下载属性损坏的文件名

download attribute corrupt file name when using query string

我有一个按以下方式调用的文件:/storage/1_aviary-image-1429352137570.jpeg?1646327099。在 blade 视图中,我创建了一个下载 link:

<a href="{{ $item['url'] }}" class="btn btn-sm btn-default"
                             download="{{ $item['url'] }}" target="_blank">
   <span class="fa fa-download"></span>
</a>

当我下载文件时,出于某种原因我得到:_storage_1_aviary-image-1429352137570.jpeg_1646327099

如您所见,? 已替换为 _

我从来没有遇到过这个问题,有人可以帮助我了解这是怎么回事吗?

亲切的问候

问题是 download 的属性 value 是可选的,设置时将设置下载文件的名称。如果您不设置它,那么文件名将是您在 href 值中为其指定的名称。

即下面有效,没有设置download的值:

<a href="somefile.txt" download>

由于 ? 不是有效的文件名字符,因此将其优雅地替换为下划线。

解决方案是不将 ? 包含在 download 的值中,而是将其保留在您的 href 值中。

解决方案:

<a href="{{ $item['url'] }}" class="btn btn-sm btn-default"
                             download="{{ $item['filename'] }}" target="_blank">
   <span class="fa fa-download"></span>
</a>

其中 $item['filename'] 是要下载的文件的名称 没有 ? 和时间戳。