Загрузка файла Laravel создает папку с временным файлом

Я пытаюсь заставить свое приложение загружать файлы в "public/uploads/documentsmentos/{the-id}", но не могу понять, что не так с моей текущей настройкой. Прямо сейчас, если я загружаю файл с именем "myfile.pdf", он создает папку с именем "myfile.pdf" и внутри нее файл *.tmp. В моей базе данных "{the-id}/myfile.pdf" сохраняется как URL-адрес файла, но это приводит меня к просмотру папки, когда я хочу увидеть файл внутри нее.

Как я могу изменить его так, чтобы при загрузке документа он создавал файл "myfile.pdf" непосредственно в "public/uploads/documentsmentos/{the-id}", чтобы я мог получить к нему доступ таким образом? {the-id} - это папка, созданная на основе идентификатора пациента, поэтому все принадлежащие им документы сохраняются в одной папке.


контроллер

public function store(Request $request)
{
    $this->validate($request, [
        'tipo' => 'required|max:100',
        'descripcion' => 'max:200',
        'fecha_documento' => 'max:20',
        'archivo' => 'required|mimes:doc,docx,pdf,jpg,png,jpeg',
        'mascota_id' => 'required',
        'mascota_num' => 'required',
    ]);

    $documento = new Documento;
    $documento->mascota_num = $request->input('mascota_num');
    $documento->mascota_id = $request->input('mascota_id');
    $documento->tipo = ucfirst($request->input('tipo'));
    $documento->descripcion = ucfirst($request->input('descripcion'));
    $documento->fecha_documento = $request->input('fecha_documento');

    if($request->hasFile('archivo')) {
        $archivo = $request->file('archivo');
        $archivo_folder = public_path('/uploads/documentos/') . $request->input('mascota_num');         
        $archivo_nombre = $archivo->getClientOriginalName();
        $archivo_url = $archivo_folder . '/' . $archivo_nombre;

        if (file_exists($archivo_folder)) {
            $archivo->move($archivo_folder . '/' . $archivo_nombre);
        } else {
            File::makeDirectory($archivo_folder, $mode = 0777, true, true);
            $archivo->move($archivo_folder . '/' . $archivo_nombre);
        }

        $documento->archivo = $request->input('mascota_num') . '/' . $archivo_nombre;
        $documento->save();

        return redirect()->route('mascotas.show', [$request->input('mascota_num')])->with('message', 'Documento agregado exitosamente.');
    }
}

Как мои загруженные файлы выглядят с этим кодом:

uploads/documentos/

-- 1
  -- file.pdf /folder
    -- random_name.tmp /file
-- 2
  -- file.pdf /folder
    -- random_name.tmp /file
  -- otherfile.pdf /folder 
    -- random_name.tmp /file

}

Что я хочу

uploads/documentos/

-- 1
  -- myfile.pdf /file
-- 2
  -- myfile.pdf /file
  -- otherfile.pdf /file

В идеале я хотел бы сохранить файлы закрытыми, поэтому я попытался загрузить их в папку хранения с помощью следующего кода:

Storage::put('documentos/'.$request->input('mascota_num').'/', $archivo_nombre);
$documento->archivo = Storage::url('documentos/'.$request->input('mascota_num').'/'.$archivo_nombre);

но папка {the-id} не была создана, а файлы не были сохранены, все, что я получил, было:

storage/app/documentos/

-- 1 /file without extension
-- 2 /file without extension

Я бы согласился, чтобы первая часть работала сейчас. Заранее спасибо за помощь.

1 ответ

Решение

После долгих проб и ошибок мне удалось загрузить файлы в папку хранилища моего приложения.

if($request->hasFile('archivo')) {
    $archivo = $request->file('archivo');

    Storage::disk('documentos')->put($request->input('mascota_num') . '/' . $archivo->getClientOriginalName(),  File::get($archivo));

    $documento->archivo = $request->input('mascota_num') . '/' . $archivo_nombre;
    $documento->save();
}

Файлы сохраняются в /storage/app/public/documentos/ в правильной папке идентификатора пациента и с правильным именем файла.

Я не нашел способа правильно ссылаться на файлы из моего шоу-блейда, Storage::url('documentos/'.$documento->archivo)) показывает страницу ошибки 404, хотя путь к файлу указан правильно. Надеюсь, я смогу заставить это работать дальше.

Другие вопросы по тегам