首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel $request->file()返回null

Laravel $request->file()返回null
EN

Stack Overflow用户
提问于 2016-07-06 14:42:14
回答 4查看 74.4K关注 0票数 48

在后台使用Laravel上传文件有困难。

问题

Laravel $request->file()方法返回null。

设置

我使用超剂构建了一个AJAX请求,对请求进行了调试,一切看起来都很好。Content-Length将根据我添加的图像进行更改,指示已将图像添加到请求中。Content-Type也被设置为multipart/form-data

代码语言:javascript
运行
复制
// request headers
Content-Length:978599
Content-Type:multipart/form-data; 

// request payload
Content-Disposition: form-data; name="files"; filename="item-keymoment.png"
Content-Type: image/png

但我无法在Laravel拿到文件。使用$request->file('files')返回NULL,但是如果我调试$_FILES数组,我注意到我的文件已经上传了。

代码语言:javascript
运行
复制
dd($request->file('files'))
// NULL

dd($_FILES);
// array:1 [
//   "files" => array:5 [
//     "name" => "item-keymoment.png"
//     "type" => "image/png"
//     "tmp_name" => "/tmp/phpipbeeM"
//     "error" => 0
//     "size" => 978274
//   ]
// ]

dd($request->files->all())
// []

是什么原因导致Laravel忽略了这个文件?

输入文件的Content-Type不是application/octet-stream

下面的已经回答了这个问题.

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-06 14:42:14

注意到我在Controller方法中接收到的$request对象是JsonRequest的一个实例,它是一个扩展Illuminate\Http\Request的自定义类(目前为空)。

它的实施方式是:

代码语言:javascript
运行
复制
<?php

namespace App\Http\Requests;

use Illuminate\Http\Request;

class JsonRequest extends Request {
}

但如果我改变了

代码语言:javascript
运行
复制
// from
use App\Http\Requests\JsonRequest;
public function add_background_image (JsonRequest $request) {
  dd($request->file('files'))
  // NULL
}

// to
use Illuminate\Http\Request;
public function add_background_image (Request $request) {
  dd($request->file('files'))
  // UploadedFile {#266
  //   -test: false
  //   -originalName: "item-keymoment.png"
  //   -mimeType: "image/png"
  //   -size: 978274
  //   -error: 0
  //   ...
  // }
}

我得到了所需的输入文件。现在,切换$request实例解决了我的问题

但是我不明白为什么/如何用一个空类扩展Illuminate\Http\Request会破坏一些东西。 有人能解释一下吗?

我使用子类Illuminate\Http\Request的目的是能够在$requests上附加方法,以统一的方式处理异常/错误。例如,在部署时显示异常消息,但在生产中返回一条固定消息。

是否有不同的/更好的/更多的拉拉维尔方式来做到这一点?

我认为只需要创建一个JsonController,而不是扩展请求。

票数 6
EN

Stack Overflow用户

发布于 2018-03-08 11:46:54

您应该添加到表单标记enctype="multipart/form-data"中。

例如:

代码语言:javascript
运行
复制
<form method="POST" action="{{route('back.post.new')}}" enctype="multipart/form-data">
.............
</form>

添加它,您可以使用自定义请求。

希望你能帮上忙!

票数 100
EN

Stack Overflow用户

发布于 2020-01-03 21:47:32

我只在服务器上遇到了这个问题。图像存储在$_FILES变量中,该变量指向php.ini文件中的一个物理目录。确保您对此目录具有正确的权限。

php.ini:

upload_tmp_dir = /Applications/MAMP/tmp/php

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38226875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档