Laravel 5.3 Storage::put создает каталог с именем файла

Я использую функцию хранения файлов Laravel для сохранения файла:

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

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

Спасибо!

6 ответов

Решение

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

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

Storage::disk('local')->putFileAs('', $file, $filenewname);

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

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

Так что вы можете изменить это на

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

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

$file закодирован. Вам необходимо раскодировать файл.

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

Я знаю, что это очень старый вопрос, сегодня у меня была такая же проблема, и я попытался

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

это было очень полезно, но в моем случае я хотел, чтобы файл находился внутри папок, напримерfolder/folder/my_file.pdf

это решение не помогло.

Я также пробовал этоStorage::put("folder/folder/my_file.pdf", $contents);

тоже не помогло.

Нашел эту волшебную функцию storeAs , и она помогла. Вот один пример из моего кода.

      $this->residence_paper->storeAs('folder/another_folder', $residence_paper.'.pdf');

Работал нормально для меня.

Чтобы создать новую папку или загрузить изображение в уже созданную папку, используя функцию хранения laravel 8.83.27.

      use Illuminate\Support\Facades\Storage;

$path     = 'uploads/employee/";
$filename = "testemp.pdf";                // For any file format
$image    = $request->image;              //base 64 format
Storage::disk('public')->put($path."/".$filename, base64_decode($image));
Другие вопросы по тегам