如何处理文件上传名称

科尔尼

我正在尝试处理文件上传,现在我面临两难境地。在处理文件名时,我实际上考虑使用两个选项:

选项1:

move_uploaded_file($_FILES['pdf']['tmp_name'], sprintf('./uploads/%s.%s', sha1_file($_FILES['pdf']['tmp_name']),$ext

选项 2:

move_uploaded_file($_FILES['pdf']['tmp_name'], sprintf('./uploads/%s.%s', "name_$date", $ext

首先将使用 sha1_file 生成哈希,它看起来不太漂亮(我想从数据库中获取上传的文件名并将其显示在页面上),但会阻止多个相同的文件上传。

Second 获得了一个漂亮的文件名,但不能防止重复(file_exists似乎可以识别重复但我无法停止move_upload_file

你建议我怎么做才能在没有文件上传重复的情况下获得好的文件名?

马蒂亚斯·马姆施

也许一个简单的解决方案:您可以使用 sha1 哈希的名称创建一个临时目录,并使用其原始名称放入文件名。

这样,多文件上传如果不同就会到不同的目录,但是你会保留原来的文件名。

例子:

$uploadDir = "/your upload dir";
$contentHash = sha1_file($_FILES['pdf']['tmp_name']);
$tmpDir = $uploadDir . DIRECTORY_SEPARATOR . $contentHash;
mkdir($tmpDir, 0777); 
// add filename validation before storing it! 
$fileName = $tmpDir . DIRECTORY_SEPARATOR . $_FILES['pdf']['name'];
move_uploaded_file($_FILES['pdf']['tmp_name'], $fileName); 

你会得到这样的目录结构:

  • 01BADCOFFEE123
    • 测试.pdf
  • (其他一些哈希)
    • 测试.pdf
  • ...

要稍后迭代文件,只需使用递归目录迭代器:

$uploadDir = "/your upload dir";
$fileIterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($uploadDir), \RecursiveIteratorIterator::LEAVES_ONLY);

无需在数据库中存储任何内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

上传名称过长的文件

来自分类Dev

PHP文件上传名称到sql表

来自分类Dev

无法上传名称中带有空格的文件

来自分类Dev

Laravel 文件上传名称不正确

来自分类Dev

在输入的名称和数量是动态的情况下,如何处理多个文件上传?

来自分类Dev

如何处理电子形式的本地文件上传?

来自分类Dev

我应该如何处理Meteor中的文件上传?

来自分类Dev

如何处理和删除“被遗忘”的上传文件?

来自分类Dev

在Google Cloud SDK Shell上上传名称中带有空格的文件

来自分类Dev

在Google Cloud SDK Shell上上传名称中带有空格的文件

来自分类Dev

在JS中获取文件上传名称和扩展名

来自分类Dev

如何处理文件?

来自分类Dev

Tomcat Servlet 3.0 分段文件上传名称在临时文件夹中发生冲突

来自分类Dev

django模板上传文件-如何处理不存在的物理文件

来自分类Dev

使用Node JS存在同名文件时如何处理文件上传

来自分类Dev

如何处理文件路径?

来自分类Dev

引发其他验证错误时如何处理文件上传

来自分类Dev

如何处理名称冲突的python包?

来自分类Dev

如何处理不同的名称空间?

来自分类Dev

将上传的文件存储在Web应用程序的文件系统中时如何处理问题?

来自分类Dev

如何处理MaxUploadSizeExceededException:Servlet中的最大上传量

来自分类Dev

请求上传期间如何处理客户端中止?

来自分类Dev

希望得到指导如何处理图像上传和显示

来自分类Dev

如何处理蒸气4中上传的多个图像?

来自分类Dev

将文件上传到s3时如何处理互联网不可用?

来自分类Dev

如何处理大型XAML文件

来自分类Dev

如何处理串联的Avro文件?

来自分类Dev

如何处理被拖到jar上的文件?

来自分类Dev

numpy如何处理mmap的npz文件?

Related 相关文章

  1. 1

    上传名称过长的文件

  2. 2

    PHP文件上传名称到sql表

  3. 3

    无法上传名称中带有空格的文件

  4. 4

    Laravel 文件上传名称不正确

  5. 5

    在输入的名称和数量是动态的情况下,如何处理多个文件上传?

  6. 6

    如何处理电子形式的本地文件上传?

  7. 7

    我应该如何处理Meteor中的文件上传?

  8. 8

    如何处理和删除“被遗忘”的上传文件?

  9. 9

    在Google Cloud SDK Shell上上传名称中带有空格的文件

  10. 10

    在Google Cloud SDK Shell上上传名称中带有空格的文件

  11. 11

    在JS中获取文件上传名称和扩展名

  12. 12

    如何处理文件?

  13. 13

    Tomcat Servlet 3.0 分段文件上传名称在临时文件夹中发生冲突

  14. 14

    django模板上传文件-如何处理不存在的物理文件

  15. 15

    使用Node JS存在同名文件时如何处理文件上传

  16. 16

    如何处理文件路径?

  17. 17

    引发其他验证错误时如何处理文件上传

  18. 18

    如何处理名称冲突的python包?

  19. 19

    如何处理不同的名称空间?

  20. 20

    将上传的文件存储在Web应用程序的文件系统中时如何处理问题?

  21. 21

    如何处理MaxUploadSizeExceededException:Servlet中的最大上传量

  22. 22

    请求上传期间如何处理客户端中止?

  23. 23

    希望得到指导如何处理图像上传和显示

  24. 24

    如何处理蒸气4中上传的多个图像?

  25. 25

    将文件上传到s3时如何处理互联网不可用?

  26. 26

    如何处理大型XAML文件

  27. 27

    如何处理串联的Avro文件?

  28. 28

    如何处理被拖到jar上的文件?

  29. 29

    numpy如何处理mmap的npz文件?

热门标签

归档