file - Laravel 文件上传和 File_hash 作为名称

标签 file laravel hash

我能够使用 Laravel Storage 和 FileSystem 类成功上传文件。

我的问题是我想通过其内容唯一地标识文件。

我想当我将文件保存在服务器上时,我用内容的哈希重命名上传的文件。

问题是有没有办法获取文件内容的哈希值。
另一个复杂性是它是一个 excel 文件。

注意:我尝试使用 md5_file 来使用文件哈希,但是对于 xlsx 文件,即使我保存文件而不进行单一更改,md5_file 也不相同。

谢谢,

最佳答案

注意:从 Laravel 5.4 开始,hashName()函数不再根据文件的内容哈希生成文件名。为此,您需要使用 md5_file()手动。

哈希答案

Laravel 在文件上传器上有一个名为 hashName() 的方法根据 API docs生成“文件的文件名,它是内容的 MD5 哈希值”。我最近在一个项目中使用了它来做你想要做的事情和 md5_file() .这是我如何完成它的一个例子:

看法

<form method="POST" action="/controller" files="true" enctype="multipart/form-data">
    {!! csrf_field() !!}
    <input type="file" id="file-list" name="file-list[]" multiple="true" />
    <button type="submit">Upload Files</button>
</form>

Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Image;
use App\Filename;
use Storage;

class ImageController extends Controller
{
    /**
     * Store an uploaded file.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $disk = Storage::disk('images');

        foreach ($request->file('file-list') as $file) {

            $filename = Filename::first();

            $disk->putFile('', $file);

            Image::create([
                'filename' => $filename->name,
                'title' => $file->getClientOriginalName(),
                'extension' => $file->guessClientExtension(),
                'size' => $file->getClientSize(),
                'mime' => $file->getClientMimeType(),
                'hash' => md5_file($file->getRealPath()),
            ]);

            $filename->delete();
        }
    }
}

Excel 问题

Excel 有时也会这样对我。 This question可能是相关的。我不确定您可以在这里做很多事情,除非您可以控制上传,在这种情况下,您可以避免在哈希检查之前打开它们。

关于file - Laravel 文件上传和 File_hash 作为名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33476525/

相关文章:

powershell - 比较 Azure Properties.ContentMD5 和 Get-Filehash 之间的字符串输出

c - 将文件名打印到标准输出

c - 如何只读取每行的第一个单词?

php - 查询需要很长时间来执行 laravel

php - 无法添加外键

php - 从 7.9.2 更新到 Laravel 8.x 后,$user -> links() 用户界面有问题,可能是 bootstrap

ruby - RSpec:在 RSpec 中测试大型哈希

phpThumb - 无效的哈希值

swift - 搜索目录中的所有 txt 文件 - Swift

linux - 编写一个bash脚本来查找目录中以a开头的所有文件,如果存在则不执行任何操作