2017-09-19 5 views
1

내가 하나의 이미지에 대한 파일 업로드 방법은 다음 코드를 사용하여 제대로 작동이 작동하지 않는 점() 메소드 :Laravel 갑자기

$file = $request->file('file'); 

if ($file && $file->isValid()) { 
    $photo['size'] = $request->file('file')->getClientSize(); 
    $path = $request->file('file')->store($request->subdomain); 
    $path = explode('/', $path); 
    $photo['file'] = $path[1]; 
    $photo['cover'] = 1; 
    $photo['gallery'] = $newGallery->id; 
    $photo['uploaded_by'] = $user->id; 
    Photo::create($photo); 
} 

$filestore() 방법 작품 여기 UploadedFile의 인스턴스이며, 아주.

그러나 여러 파일을 업로드 할 수 있도록 방법을 변경해야했습니다. 다음 적응 코드가 다음 오류 그물 :

$photos = $request->files->all(); 

    foreach($photos as $photo) { 
     foreach($photo as $p) { 

      if($p->isValid()) { 
       $path = $p->store($request->subdomain); 
       $path = explode('/', $path); 

       $newPhoto = [ 
        'uploaded_by' => $user->id, 
        'file' => $path[1], 
        'size' => $p->getClientSize(), 
        'gallery' => $request->gallery, 
        'subdomain' => $request->subdomain, 
       ]; 

       Photo::create($requestData); 
      } 
     } 
    } 

Call to undefined method Symfony\Component\HttpFoundation\File\UploadedFile::store()

$pdd 출력 :

UploadedFile {#28 ▼ 
    -test: false 
    -originalName: "Untitled.png" 
    -mimeType: "image/png" 
    -size: 18030 
    -error: 0 
    path: "/tmp" 
    filename: "phpBDSWCR" 
    basename: "phpBDSWCR" 
    pathname: "/tmp/phpBDSWCR" 
    extension: "" 
    realPath: "/tmp/phpBDSWCR" 
    aTime: 2017-09-19 20:19:57 
    mTime: 2017-09-19 20:19:57 
    cTime: 2017-09-19 20:19:57 
    inode: 3014878 
    size: 18030 
    perms: 0100600 
    owner: 1000 
    group: 1000 
    type: "file" 
    writable: true 
    readable: true 
    executable: false 
    file: true 
    dir: false 
    link: false 
} 

Laravel 적절한 store()을 갖는다 Illuminate\Http\UploadedFile를 사용해야 같이 상당히 이상한 메서드 (docs)를 가지고 있지 않은 Symfony의 클래스 (docs)

또한 symfony의 move()을 사용하면 store()이 생성 된 파일 이름과 확장자로 파일을 이미 저장하므로 매우 안정적이지 않으므로 임의의 파일 이름을 생성하고 확장명을 추측 할 필요가 없습니다.

결론은 다음과 같습니다. 왜 그런 식으로 행동하며 적절한 클래스 인스턴스를 사용하게 할 수 있습니까?

+0

같은 일을 시도 할 수 있을까? – Jonathon

+0

''Symfony \ Component \ HttpFoundation \ File \ UploadedFile '' –

+0

이전 작업 단일 업로드에서'dd (get_class ($ request-> file ('file ')') 출력 : "Illuminate \ Http \ UploadedFile"' –

답변

2

요청 인스턴스에서만 사용중인 스토어 메소드 만 사용할 수 있습니다. `출력을,

어쩌면 당신은`DD (get_class ($ P는))하는 일이

foreach($photo as $index => $p) { 
    $request->file('files')[$index]->store(); 
} 
+0

'$ request-> file ('files')'는 IIRC 예외를 던졌습니다. 전에 비슷한 것을 시도했습니다. 확인을 위해이 방법을 시도해 보겠습니다. –

+0

'$ photos = $ request-> file ('files'); foreach ($ photos as $ photo) { if ($ photo-> isValid()) { $ path = $ photo-> store ($ request-> subdomain); {...} 'worked! 이제 업로드하는 모든 사진을 저장하지 않는 또 다른 문제가 있습니다.하지만 그것은 다른 모든 비즈니스입니다. 감사! –

+0

도움이되어 기쁩니다. –