Загрузка файлов в Laravel - PullRequest
       7

Загрузка файлов в Laravel

0 голосов
/ 27 октября 2018

Я только начинаю с Laravel и пытаюсь заставить загрузку файлов работать с использованием Dropzone JS . Я могу успешно загружать файлы, но они попадают в app/Http/Controllers, где они недоступны для публичного доступа.

Похоже, что этот каталог рассматривается как корневой, поэтому, если я укажу / uploads в качестве папки, они перейдут в app/Http/Controllers/uploads (что, очевидно, тоже не годится). Использование .. s, похоже, не имеет никакого эффекта.

Это мой метод загрузки файлов:

$ds = DIRECTORY_SEPARATOR;
$storeFolder = '';
if ( ! empty($_FILES)) {
    $tempFile = $_FILES['file']['tmp_name'];
    $targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;
    $targetFile =  $targetPath. $_FILES['file']['name'];
    move_uploaded_file($tempFile,$targetFile);
}

Я также попробовал ряд других методов, которые я нашел (ниже), но я получаю 500 ошибок в инспекторе элементов Chrome с этими.

Из официальных документов

$path = $request->file('file')->store('uploads');

Из учебника, который я нашел

$file = $request->file('file');
$destinationPath = '/';
$file->move($destinationPath,$file->getClientOriginalName());

Из другого урока

$uploadedFile = $request->file('file');
$filename = time().$uploadedFile->getClientOriginalName();
Storage::disk('local')->putFileAs(
    '/'.$filename,
    $uploadedFile,
    $filename
);

Текущий метод выглядит нормально, но ему просто нужно хранить файлы в public / uploads.

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Я также предлагаю сделать идеальный маршрут для нашего пути к хранилищу, чтобы, когда кто-то добавляет имя хоста / хранилище, он не показывал кому-то ваш каталог, только файлы могут быть доступны

Route::get('storage/{filename}', function ($filename)
{
    $path = storage_path('public/' . $filename);

    if (!File::exists($path)) {
        abort(404);
    }

    $file = File::get($path);
    $type = File::mimeType($path);

    $response = Response::make($file, 200);
    $response->header("Content-Type", $type);

    return $response;
});
0 голосов
/ 27 октября 2018

Используйте этот путь вместо:

$targetPath = public_path().'/uploads/';
...