2016-10-12 4 views
4

Я использую функцию хранения файлов Laravel, чтобы сохранить файл:Laravel 5.3 Хранения :: поместить создает каталог с именем файла

public function dataPost(Request $request) { 

    $fileInForm = 'doc'; 

    if ($request->hasFile($fileInForm)) { 

     $file = $request->file($fileInForm); 
     if ($file->isValid()) { 

      // Filename is hashed filename + part of timestamp 
      $hashedName = hash_file('md5', $file->path()); 
      $timestamp = microtime() * 1000000; 

      $newFilename = $hashedName . $timestamp . '.' . $file->getClientOriginalExtension(); 

      Storage::disk('local')->put($newFilename, $file); 
     } 
    } 
} 

Это сохранить файл, но внутри директории называется так же, как файл, например:

storage/app/952d6c009.jpg/952d6c009.jpg

или

storage/app/234234234.jpg/234234234.jpg

Ожидается ли это? Есть ли способ просто сохранить файл без отдельной директории для каждого файла?

Спасибо!

ответ

9

вам необходимо предоставить содержимое файла в второй аргумент не подам объект, попробуйте следующее:

Storage::disk('local')->put($newFilename, file_get_contents($file));

2

Это произошло потому, что вы указываете каталог для хранения как имя файла. newFilename, должно быть именем каталога, таким как «изображения». Обратитесь к этой линии

Storage::disk('local')->put($newFilename, $file); 

Таким образом, вы могли бы изменить это

Storage::disk('local')->putFile('images', $file); 

Тогда вы получите путь хранится в storage/app/images/234234234.jpg

+0

В этом случае, в какой момент файл получает новое имя файла? Должен ли я редактировать объект '$ file' для обновления имени файла? Что-то вроде '$ file-> originalName = $ newFilename;'? – zundi

+0

вы можете это сделать или использовать @ ABDEL-RHMAN – xmhafiz

Смежные вопросы