我正在尝试使用Laravel 5设置图像上传器。
这是表格。
<form action="/edit/{{$id}}" method="POST" enctype="multipart/form-data">
{!! csrf_field() !!}
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
<input type="hidden" name="_method" value="PUT">
//There are other tags (including other input) here
<input type="file" name="pic" accept="image/*">
<input type="submit" value="Apply Changes">
</form>
这是控制器功能,它将从上面的form
运行。
public function update($id)
{
$this->model->find($id)->fill($this->request->all())->save();
if ($this->request->hasFile('pic')) {
$file = $this->request->file('pic');
$name = $file->getClientOriginalName();
$file->move('assets/serviceimages/', $name);
}
return redirect('/blahblah');
}
您可能已经注意到,这不会将上传的文件存储在assets/serviceimages/
目录下,这是我一直在尝试的。
基本上我一直关注this tutorial,但显然我错过了一些东西而且完全不知道它是什么,即使在我看了API documentation之后。
在控制器功能的if
语句中,确认$file
和$name
符合我的预期。
因此,我怀疑问题出在move()
函数。
任何小小的建议都会受到赞赏,因为这是我第一次尝试设置上传器。
答案 0 :(得分:0)
我发现必须使用存储适配器来使用对我有用的完整文件路径。
$storageAdapter = Storage::disk('v1')->getDriver()->getAdapter()
$full_path_before = $storageAdapter->applyPathPrefix($oldPath);
$full_path_after = $storageAdapter->applyPathPrefix($newPath);
if (!File::exists($full_path_before)){
throw new \Exception("Error moving folders");
}
$move_files = $full_path_after !== $full_path_before;
if ($move_files){
File::move($full_path_before, $full_path_after);
}
答案 1 :(得分:0)
使用此方法将可以100%工作
if($request->hasFile('filename')){
$file = $request->filename;
$file_new_name = $file->move("upload/posts/", $file->getClientOriginalName());
$post->filename = $file_new_names;
}
记住文件名是您的