我需要写入上载文件的表路径。我正在等待相同的路径uploads / fileName1540886604.jpg,但是我正在获得相同的路径/ tmp / phpQOolst。
form.blade.php
<input type="file" name="file">
PostController.php
public function store(Request $request, Post $post)
{
$fileName = "fileName" . time() . '.' . $request->file('file')->getClientOriginalExtension();;
$path = $request->file("file")->storeAs('uploads', $fileName, 'public');
$post->setAttribute('file', $path);
$post = $post->create($request->all())
Post.php
class Post extends Model
{
protected $fillable = ['name', 'slug', 'content', 'file', 'published', 'created_by'];
public function setFileAttribute($value)
{
//dd($value);
$this->attributes['file'] = $value;
}
当我添加代码dd($ value)时,我得到了uploads / fileName1540886604.jpg进行测试,但有注释,它存储在/ tmp / phpQOolst中。
答案 0 :(得分:1)
您正在使用请求中的所有内容覆盖$ post。
最好做些类似的事情
$path = $request->file("file")->storeAs('uploads', $fileName, 'public');
$post = new Post($request->all());
$post->file = $path;
$post->save();
或更短
$path = $request->file("file")->storeAs('uploads', $fileName, 'public');
$request->merge(['file' => $path]); //Overwrite file in the request
$post = Post::create($request->all());
但是一个缺点是您将无法再访问File对象,因此
$post = Post::create($request->except('file')->toArray() + ['file' => $path]);
也可以工作
答案 1 :(得分:0)
您可以使用mutator直接保存文件
public function setFileAttribute($file)
{
$fileName = "fileName" . time() . '.' . $file->getClientOriginalExtension();
$path = $file->storeAs('uploads', $fileName, 'public');
$this->attributes['file'] = $path;
}
然后在控制器中,您只需要创建帖子:
$post = Post::create($request->all());