laravel - Laravel 5.6 - 无法更改 $request 中上传的文件名,临时名称插入数据库
问题描述
我创建了一个表单file
并上传了文件并将数据很好地存储在数据库中。问题是,我需要将修改后的文件名存储在数据库中,但 Laravel 将临时名称存储在数据库中。这是代码
public function store(Request $request)
{
$image = $request->file('file');
$imageName = time().rand(1,100).$image->getClientOriginalName();
$image->move(public_path('uploads'),$imageName);
$request['file'] = $imageName;
//$request->file = $imageName;
$im = new Image($request->all());
$this->user->images()->save($im);
}
我试图file
手动修改,但没有奏效。这dd
是$request
但是临时文件名仍然插入到数据库中。
这是表和file
列必须有文件名
如您所见,我提供的文件名不在file
列中,临时文件在其中
解决方案
发生的原因:
当您在屏幕上打印$request
数组时,上传的文件名已根据您想要的名称更改,
但是使用方法时会出现问题$request->all()
,请参见下面的Illuminate/Http/Concerns/InteractsWithInput.phpall()
中的方法
public function all($keys = null)
{
$input = array_replace_recursive($this->input(), $this->allFiles());
if (! $keys) {
return $input;
}
$results = [];
foreach (is_array($keys) ? $keys : func_get_args() as $key) {
Arr::set($results, $key, Arr::get($input, $key));
}
return $results;
}
如果两者具有相同的名称,则上述方法将普通输入键替换为文件输入键,这意味着如果您有$request['image']
然后$request->file('image')
在调用$request->all()
your之后$request['image']
必然会替换为$request->file('image')
.
那么如果你不想像这里那样自动替换它你想获取新上传的文件名$request['file']
而不是 tmp\php23sf.tmp 怎么办,
解决方案:
一种解决方法是在文件输入和数据库字段名称中使用不同的名称,让我们举个例子:
file
您有用于存储上传文件名的数据库表字段,因此userfile
在文件输入中使用名称或任何其他名称作为<input type="file" name="userfile">
- 然后在您的控制器中使用与您使用不同名称相同的代码:
见下文:
public function store(Request $request)
{
$image = $request->file('userfile');
$imageName = time().rand(1,100).$image->getClientOriginalName();
$image->move(public_path('uploads'),$imageName);
$request['file'] = $imageName;
$im = new Image($request->all());
$this->user->images()->save($im);
}
它肯定会起作用,如果我错了,请纠正我,或者如果您想了解更多信息,请咨询我,谢谢。
推荐阅读
- angular - 我应该取消订阅从 Subject 派生的 Observable 吗?
- certificate - 签名工具和 300 MB 的大小限制(代码签名和验证)
- php - 如何使“未定义属性”错误成为致命错误并终止脚本?
- api - Google Apps 脚本中 UrlFetchApp.fetch 的地址不可用
- python - 更改列 openpyxl 的日期格式
- java - 如何在java中获取jTable的行或列的文本
- workflow - 在 Maximo 中将工作流路由到人员组
- html - 无法从边栏中输入的数据更新谷歌电子表格
- c# - 使用 C# 在 ASP.NET MVC 中查找站点的访问者数量
- javascript - Google Apps 脚本 - 两个函数/脚本在单独运行但不组合时有效