我能够使用 Laravel Storage 和 FileSystem 类成功上传文件。
我的问题是我想通过其内容唯一地标识文件。
我想当我将文件保存在服务器上时,我用内容的哈希重命名上传的文件。
问题是有没有办法获取文件内容的哈希值。另一个复杂性是它是一个 excel 文件。
注意:我尝试使用 md5_file 来使用文件哈希,但是对于 xlsx 文件,即使我保存文件而不进行单一更改,md5_file 也不相同。
谢谢,K
注意:从 Laravel 5.4 开始,该hashName()函数不再根据文件的内容哈希生成文件名。为此,您需要md5_file()手动使用。
Laravel 在文件上传器上有一个方法,称为hashName()根据API 文档生成“文件的文件名,即内容的 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>
Run Code Online (Sandbox Code Playgroud)
<?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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Excel 有时也会这样对我。这个问题可能是相关的。我不确定您可以在这里做很多事情,除非您可以控制上传,在这种情况下,您可以避免在哈希检查之前打开它们。
| 归档时间: |
|
| 查看次数: |
12358 次 |
| 最近记录: |