【问题标题】:How to get the content of a file sent via POST in Laravel 4?如何在 Laravel 4 中获取通过 POST 发送的文件的内容?
【发布时间】:2019-09-26 19:01:33
【问题描述】:

我有一个通过 Laravel 4 中的 POST 方法发送文本文件的表单。但是,在控制器内部,我无法弄清楚如何获取其内容以便将其放入数据库中的 BLOB 字段中。

Laravel 的文档和我在网上找到的所有帖子,总是展示如何使用 ->move() 方法将内容保存到文件中。

这是我在控制器中的代码:

$book = Books::find($id);
$file = Input::file('summary'); // get the file user sent via POST
$book->SummaryText = $file->getContent(); <---- this is the method I am searching for...
$book->save(); // save the summary text into the DB

(SummaryText 是我的数据库表上的 MEDIUMTEXT)。

那么,如何在 Laravel 4.1 中获取文件内容,而无需保存到文件中呢?这可能吗?

【问题讨论】:

    标签: php laravel-4


    【解决方案1】:

    如果您要发布一个文本文件,那么它应该已经在服务器上。根据 laravel 文档,Input::file 返回一个扩展 php 类 SplFileInfo 的对象,所以这应该可以工作:

    $book->SummaryText = file_get_contents($file->getRealPath());
    

    我不确定 php 方法 file_get_contents 是否可以在 Laravel 框架中工作......如果它不尝试这个:

    $book->SummaryText = File::get($file->getRealPath());
    

    【讨论】:

    • 是的,file_get_contents() 在 Laravel 下工作。我选择了你的第一个解决方案。非常感谢!
    【解决方案2】:

    从 Laravel v5.6.30 开始,您可以获取上传文件的文件内容,例如:

    use Illuminate\Http\Request;
    
    Route::post('/upload', function (Request $request) {
        $content = $request->file('photo')->get();
    });
    

    来源:this commit

    【讨论】:

    • 感谢+1指出源代码,帮了大忙。
    【解决方案3】:

    比 file_get_contents 更好的解决方案是使用 SPL 类方法,因为 FileUpload 已经在扩展它们。

    $file = Input::file('summary')->openFile();
    $book->SummaryText = $file->fread($file->getSize());
    

    要了解有关 SplFileInfo 和 SplFileObject 的更多信息,请参阅:

    因为这些可能非常有用,并且使用 SPL(OOP)是比结构化 PHP 函数更好的解决方案。

    【讨论】:

    • 它有什么更好的地方?它是否提供一些继承错误检查?
    【解决方案4】:
    \File::get($directory.$filename);
    

    为我的项目工作,其中目录和文件名由上传方法确定。 在 laravel4 中创建工作空间(包)时使用反斜杠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-21
      • 2013-06-25
      • 2021-02-14
      • 2019-01-29
      • 2017-08-27
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      相关资源
      最近更新 更多