2016-12-30 2 views
1

Laravel 5.0을 사용하고 있습니다. 이미지 업로드에 dropzone.js를 사용하고 있습니다. 실제로 폴더를 데이터베이스에 업로드 정보 파일하지만 포스트 방법에 개체가 아닌 에 멤버 함수 getClientOriginalName()에Laravel dropzone 파일 업로드에서 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

제목과 코드는'getClientOriginalName'을 보여 주지만, 오류 메시지는'getClientOriginalExtension'입니까? 또한,'작곡가 쇼 | grep -i "symfony/http-foundation"을 명령 줄에서 실행하고 사용중인 http-foundation의 버전을 알려줍니다. –

+0

여러 파일 업로드를 사용하고 있으므로 파일을 배열로 액세스해야합니다. –

+0

** 작곡가 쇼 | grep -i "symfony/http-foundation"** 경고 :이 작성자의 개발 빌드는 60 일 이상 지난 것입니다. 최신 버전을 얻으려면 "/ usr/local/bin/composer 자체 업데이트"를 실행하여 업데이트하는 것이 좋습니다. 내 작곡가 버전은 입니다. 작곡가 버전 1.0-dev (72cd6afdfce16f36a9fd786bc1b2f32b851e764f) 2015-12-28 17 : 35 : 19' – Mohan

답변

-1

이 일어나는 오류를 방지하려면, 당신은 몇 가지를 추가 할 수 있습니다 먼저 파일에 대한 유효성 검사. 와 예를 들어

방법을

업데이트를 isValid : 내가 너무 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

@ 한스 Vn, 같은 erorr 여전히오고있다. 나는 js 파일 성공 함수에 어떤 실수가 있다고 생각 하는가? – Mohan

+0

@Mohan, 요청 (dd (Request :: all());)에서 덤프 및 다이를 게시하거나 덤프에있는 파일 존재를 확인할 수 있습니까? - 문제를 디버그하기가 더 쉬워 지도록 코드 예제도 업데이트했습니다. –