2016-12-30 4 views
1

Я использую Laravel 5.0 для загрузки изображений. Я использую dropzone.js. На самом деле при загрузке файла в папку и базы данных, но он бросает ошибку какКак преодолеть ошибку getClientOriginalName() в загрузке файла Dropzone в Laravel?

вызов функции члена getClientOriginalName() на не-объект на методе пост.

Где я пошла не так?

Просмотр файла,

<form method="POST" class="dropzone dz-clickable" id="productDropzone" action="{{url()}}/cms/website/pages/upload_files" enctype="multipart/form-data"> 
           <div class="dz-default dz-message"> 
           <span>Drop files here to upload</span> 
           </div> 
           <input name="_token" type="hidden" value="{{ csrf_token() }}"> 
          <input type="submit" value="Upload" id="submit_all"/> 
          </form> 

Ниже мои JS,

Dropzone.autoDiscover = false; 
var myDropzone = new Dropzone("form#productDropzone", { 
    paramName : 'file', 
    maxFilesize: 3, // MB 
    maxFiles: 3, 
    autoProcessQueue: false, 
    addRemoveLinks: true, 
    init: function() { 
     this.on("addedfile", function(file) { fileupload_flag = 1; }); 
     this.on("complete", function(file) { fileupload_flag = 0; }); 
    }, 
    accept: function(file, done) 
    { 
     var re = /(?:\.([^.]+))?$/; 
     var ext = re.exec(file.name)[1]; 
     ext = ext.toUpperCase(); 
     if (ext == "JPG" || ext == "JPEG" || ext == "PNG" || ext == "GIF" || ext == "BMP") 
     { 
      done(); 
     }else { 
      done("Please select only supported picture files."); 
     } 
    }, 
    success: function(file, response) { 
     obj = JSON.parse(response); 
     file.previewElement.querySelector("file").src = obj.src; 
     // alert(obj.src);return false; 
    } 
}); 
$('#submit_all').click(function(){ 
    myDropzone.processQueue(); 
}); 

функция контроллера,

$com_id  = Auth::user()->company_id; 

    $file = Request::file('file'); 
     $destinationPath = public_path() . '/images/section/'; 
     $filename = strtolower($file->getClientOriginalName()); 

     $upload_success = $file->move($destinationPath, $filename); 

     if ($upload_success) { 

      $upload = new Cms_banner_master(); 
      $upload->product_banner = json_encode($filename); 
      $upload->company_id = $com_id; 
      $upload->home_banner ="1"; 
      $upload->save(); 

      return Response::json(array($fileName)); 
      } else 
      { 
      return Response::json('error', 400); 

     } 
+0

У вас есть заголовок и код show 'getClientOriginalName', однако вы видите ошибки getClientOriginalExtension'? Кроме того, не возражаете ли вы запустить «композитор-шоу»? grep -i «symfony/http-foundation» из вашей командной строки и сообщить нам, какую версию http-основы вы используете. –

+0

Поскольку вы используете несколько загрузок файлов, вам необходимо получить доступ к файлам в виде массива. –

+0

** композитор шоу | grep -i «symfony/http-foundation» ** 'Предупреждение: этой сборке для композитора более 60 дней. Рекомендуется обновить его, выполнив «самообслуживание»/usr/local/bin/composer для получения последней версии. « Моя версия для композитора: ' Composer version 1.0-dev (72cd6afdfce16f36a9fd786bc1b2f32b851e764f) 2015-12-28 17: 35: 19' – Mohan

ответ

-1

Если вы хотите, чтобы предотвратить ошибки не произошло, вы можете добавить некоторые проверки подлинности файла в первую очередь.

Например, с IsValid методы

Update: я тоже добавил метод hasFile.

if(Request::hasFile('file') { 
    $file = Request::file('file'); 

    if($file->isValid()) { 
     $destinationPath = public_path() . '/images/section/'; 
     $filename = strtolower($file->getClientOriginalName()); 

     $upload_success = $file->move($destinationPath, $filename); 

     if ($upload_success) { 
      ... 
     } 
    } 
} else { 
    return Response::json('No file uploaded', 409); 
} 

И я бы также генерировать новое имя для загружаемого файла, таким образом, вы не нуждаетесь в getClientOriginalName:

$filename = $com_id.'_'.date('YmdHis')'.'.$file->guessExtension(); 

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

+0

Если файл присутствует, вы можете проверить только $ file-> isValid(), но, глядя на ошибку, сам файл отсутствует в запросе. –

+0

@ Hans Vn, Тот же erorr все еще горит. Я думаю, есть ли какая-либо ошибка в функции успеха js-файла? – Mohan

+0

@Mohan, можете ли вы отправить dump & die из запроса (dd (Request :: all());), или, возможно, вы можете проверить наличие файла в дампе. - Я также обновил пример кода, чтобы было легче отладить вашу проблему. –