如何在 Laravel 9 中上传存储路径中的文件?

问题描述 投票:0回答:1

我正在尝试在我的项目中上传pdf文件,但存储的结果路径是C:\xampp mp\phpB52C.tmp,文件名是LMIkeQyRRYG5sOb27ykUNgIYDYw5WyOxmdu9y3hM.pdf,路径为Storage/app/bookFiles和文件中的内容包含字符(不是真正的内容)。 我有以下两个问题:

  1. 哪里有安全路径(生产版本中的浏览器无法访问)来存储重要文件?(例如可购买的文件)
  2. 内容为何改变?

这是我的代码:

BookController =>

public function store(BookRequest $request, Product $product)
    {

      $inputs = $request->all();

      if($request->hasFile('file')){
        $file = $request->file('file');
        $file = Storage::disk('local')->put('bookFiles/',  $request->file('file'));
      }
      $inputs['product_id'] = $product->id;
      $book = Book::create($inputs);

      return redirect()->route('admin.product.book.index', $product->id);
    }

路线=>

Route::post('/book/store/{product}', [BookController::class, 'store'])->name('admin.product.book.store');

我使用put方法上传

laravel file-upload laravel-9
1个回答
0
投票

在此代码中,

put
方法会自动为文件名生成唯一的 ID。

public function store(BookRequest $request, Product $product)
{
    $inputs = $request->all();

    if($request->hasFile('file')){
        $file = $request->file('file');
        $path = Storage::disk('local')->put('bookFiles', $file);
        $inputs['file_path'] = $path; // Save the path of the file in the database
    }

    $inputs['product_id'] = $product->id;
    $book = Book::create($inputs);

    return redirect()->route('admin.product.book.index', $product->id);
}

如果你想保留原来的文件名,可以使用

storeAs
方法:

$path = Storage::disk('local')->storeAs('bookFiles', $file->getClientOriginalName(), $file);

请记住将

file_path
列(或您命名的任何名称)添加到
books
表中以存储文件路径。

© www.soinside.com 2019 - 2024. All rights reserved.