php中上传文件的散列内容

Posted

技术标签:

【中文标题】php中上传文件的散列内容【英文标题】:hashing content of uploaded file in php 【发布时间】:2018-01-28 15:53:36 【问题描述】:

我有一个上传表单,旁边还有一个 Dropzone 文件上传器,用户可以上传他们的 .csv 文件。

我想检查文件是否是新的。 检查应该包含文件的内容是否是新的

我将文件名存储在数据库中以检查新文件,但问题是当用户重命名同一个文件并再次上传时。

我的解决方案是散列每个文件的内容并将其存储在数据库中的名称旁边。

但我不知道如何在 php 和 Laravel 中散列 .csv 文件的内容。 我试过使用

hash_file('md5' , Request::file('myFileName')->getClientOriginalName());

但它会导致找不到文件或流。

不管名称如何,检查新文件的正确方法是什么?

提前致谢。

【问题讨论】:

【参考方案1】:

计算文件的哈希值是正确的方法。

做这样的事情:

public function uploadFile() 
    // check if upload is valid file (example: request()->file('myFileName')->isValid() )

    // calculate hash of a file
    $fileHash = sha1_file( request()->file('myFileName')->path() );

    //search for file in database and block same file upload (Files is Elequent model)
    if( Files::where('hash', $fileHash)->firstOrNull() != null) 
        abort(400); // abort upload
    

    // do something with file and save hash to DB

【讨论】:

以上是关于php中上传文件的散列内容的主要内容,如果未能解决你的问题,请参考以下文章

文件上传php

解密使用 wp_hash() 生成的散列字符串

PHP多文件上传格式化

php上传功能怎么实现点击浏览在打开文件之后直接上传?

在 cake php 中读取上传文件时缺少控制器

WebShell文件上传漏洞分析溯源(第1题)