正在对上载的文件名进行编码


Encoding uploaded file name

我当前的网站允许用户上传文件,因此,为了避免冲突,我需要以某种方式对存储的文件名进行编码。但我希望能够检索原始文件名进行下载。所以,我正在尝试将文件名编码为

  • 独特的
  • 可解码的

到目前为止,我已经尝试使用以下代码:

    $hash = $file->hashName();
    $fileName = base64_encode(json_encode([
        'hash' => $hash,
        'name' => $file->getClientOriginalName()
    ]));       
    return $fileName;

但是base64_encode会产生超过256个符号的字符串,尤其是当文件名使用unicode字符(如cyrillic)时。那么,还有其他方法可以对文件名进行编码吗?

我认为做映射会更简单。为了在磁盘上保存文件,您可以选择一些唯一的名称。在数据库中,您保留有关已上传文件的参考,包括原始文件名和磁盘上的文件名,当有人想下载该文件时,您可以在Content-Disposition标头中设置原始文件名。

header('Content-Disposition: filename="originalFilename.pdf"');