我有一个系统,其中用户上传文件(pdf,word)等。问题是,外国用户上传的文件名在阿拉伯语,中文,日语和系统,能够处理他们,是添加到数据库中。
出现问题的地方是尝试使用php下载文件:
$result = mysql_query($query) or die('Error, query failed');
list($filename, $type, $filesize, $filepath) = mysql_fetch_array($result);
header("Content-Disposition: attachment; filename=$filename");
header("Content-length: $filesize");
header("Content-type: $type");
readfile($filepath);系统无法识别文件名,因此无法下载该文件。有什么建议吗?
发布于 2009-07-09 15:31:23
我已经避免了这个问题,方法是为上传的每个文件生成一个唯一的id,并使用该ID重命名文件,然后将id、原始文件名和扩展名保存在数据库表中。然后,您可以轻松地在表中查找所需的ID,检索原始文件名(您可能会显示它以便于阅读)和扩展名,然后下载{id}.{扩展名}文件。
这也有一个额外的好处,如果上传的两个文件具有完全相同的名称,则后一次上传不会覆盖原始文件。
发布于 2009-07-08 10:17:23
上传Unicode名称很复杂,比如(例如我是神.doc )一直到php5和linux,我怀疑很多操作系统都不支持这样的文件名。
您的另一种选择是使用一些自定义名称(可能是{.doc-id}文件)上传它们,并将它们的信息(如原始文件名)存储在数据库表中,在下载页面上,您可以使用包含该文件信息的表中存储的信息来修改标头
发布于 2009-07-08 18:23:20
如果需要将文件名存储在MySQL中,请确保具有适当的表和列排序规则,如utf8_unicode_ci。在连接之后,不要忘了做mysql_query("SET NAMES utf8");。这应该足以正确地存储和检索Unicode字符串。
至于ASCII头和非Content-Disposition文件名,已经有了一个很好的答案:"How to encode the filename parameter of Content-Disposition header in HTTP?“。
https://stackoverflow.com/questions/1096533
复制相似问题