Laravel AJAX загрузки изображения 'переместить' функция, создающая 500 ошибок

Я пытаюсь загрузить изображение AJAX с помощью Laravel 5.4. Все остальные поля в моей форме работают, кроме move() функция на входе файла, которая возвращает ошибку 500. Я добавил весь код, связанный с изображением ниже. При нажатии кнопки отправки я делаю e.preventDefault() а затем запуск функции AJAX.

HTML

{!! Form::open(['action' => 'ProjectController@store','id' => 'createForm','files' => true]) !!}
    <div class="form-group">
        {!! Form::label('image', 'Project Image') !!}
        {!! Form::file('image') !!}
    </div>
    {!! Form::submit('Create', ['id' => 'createSubmit', 'class' => 'btn btn-primary']) !!}
{!! Form::close() !!}

AJAX

var formData = new FormData($('#formElem'));    
$.ajax({
        url: '{{ route('project.store') }}',
        type: 'post',
        contentType: false,
        processData: false,
        headers: {
            'X-CSRF-TOKEN': '{{ csrf_token() }}'
        },
        data: formData,
        success: function(data) {
            alert('success');
        },
        error: function(data) {
            alert('error');
            console.log(data);
        }
    });

PHP

if (isset($_FILES['image'])) {
    $image = $_FILES['image'];
    $image_filename = 'feature-' . $image['name'];
    // THIS LINE CAUSES THE 500 ERROR
    // $image->move(public_path('uploads'), $image_filename);
}

VAR_DUMP OF $ _FILES ['изображение']

array(5) {
  ["name"]=>
  string(12) "Homepage.png"
  ["type"]=>
  string(9) "image/png"
  ["tmp_name"]=>
  string(23) "C:\xampp\tmp\php7AD.tmp"
  ["error"]=>
  int(0)
  ["size"]=>
  int(251159)
}

Папка для загрузки существует.

2 ответа

Решение

Попробуйте загрузить изображение так:

$destinationPath = 'path/th/save/file/';
$image = $request->file('image');
$name =  $user_meta['image_org_name'] = $image->getClientOriginalName();
$extension = $image->getClientOriginalExtension();
$file_name =  md5(uniqid().time()).'_'.$user_meta['image_org_name'];
$image->move($destinationPath,$file_name);

Какую ошибку вы получаете, возможно, это связано с разрешением папки "uploads"?

Проверьте подробности 500 ошибок в журналах Laravel.

Вы также можете проверить подробности ошибки в Chrome Dev. Перейдите на вкладку "Сеть", отфильтруйте по "XHR", нажмите на ошибку 500, которая должна быть выделена красным, а в верхнем меню перейдите на вкладку "Предварительный просмотр". Это должно дать вам подробную ошибку сервера.

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