我用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
的{{1}}
但是临时文件名仍然插入到数据库中。
这是表,$request
列必须具有文件名
您看到我提供的文件名不在file
列中,临时文件位于其中
答案 0 :(得分:1)
尝试一下:
$im = new Image([
'title' => $request->get('title'),
'type' => $request->get('type'),
'photographer' => $request->get('photographer'),
'year' => $request->get('year'),
'detail' => $request->get('detail'),
'file' => $imageName
]);
答案 1 :(得分:1)
在屏幕上打印$request
数组后,上载的文件名已根据您的期望名称进行了更改,
但是当您使用$request->all()
方法时会出现问题,请参见Illuminate/Http/Concerns/InteractsWithInput.php中的all()
方法
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')
,则在调用{{1}之后}您的$request->all()
必将替换为$request['image']
。
所以,如果您不想像此处那样自动替换它,该怎么办,您想在$request->file('image')
中而不是tmp \ php23sf.tmp中获取新上传的文件名,
一种解决方法是在文件输入和数据库字段名称中使用不同的名称,让我们举个例子:
$request['file']
用于存储上传的文件名,因此在文件输入中使用名称file
或其他任何名称作为userfile
请参见下文
<input type="file" name="userfile">
绝对可以,如果我错了,请纠正我,或者如果需要进一步的信息,请问我。
答案 2 :(得分:1)
您必须将名称更改为:
<input name="file" type="file"/>
收件人:
<input name="upload_file" type="file"/>
答案 3 :(得分:0)
当您在屏幕上打印 $request 数组时,上传的文件名 已更改为您想要的名称,
但是当你使用 $request->all() 方法时出现问题,见下文 Illuminate/Http/Concerns/InteractsWithInput.php 中的 all() 方法
但是,您可以使用名称文件保留输入并制作
$image = $request->file('file');
$imageName = time().rand(1,100).$image->getClientOriginalName();
$image->move(public_path('uploads'),$imageName);
$data = $request->all();
$data['file'] = $imageName;
$im = new Image($data);
$this->user->images()->save($im)
答案 4 :(得分:-1)
查看您提供的输出后,我认为这是您的错误。
$imageName = time().rand(1,100).$image->getClientOriginalName();
您必须添加“原始扩展名”而不是“原始名称”,
$imageName = time().rand(1,100).$image->getClientOriginalExtension();
希望您能理解