2017-01-18 59 views
0

所以昨天我試着做一個upload file function,因爲當用戶做他的產品時,他也可以上傳圖片。上傳圖片並創建縮略圖Laravel 5.2

但是當我迭代項目時,圖片太大,所以我決定使用干預包來調整圖片大小,並創建縮略圖。

我做了功能,但它的部分工作。

if($file = $request->hasFile('image')) { 
     $file = $request->file('image'); 
     $extension = $file->getClientOriginalName(); 
     $username = Auth::user()->username; 
     $destinationPath = public_path('/uploads/products/' . $username); 
     $thumb = Image::make($file->getRealPath())->resize(100, 100, function ($constraint) { 
      $constraint->aspectRatio(); //maintain image ratio 
     }); 
     $thumb->save($destinationPath.'/thumb_'.$extension); 
     $destinationPath = public_path('/uploads/products/' . $username); 
     $file->move($destinationPath, $extension); 
     $product['imagePath'] = '/uploads/products/'. $username . '/' . $extension; 
     $product['thumbnail'] = '/uploads/products/'. $username . '/thumb_' . $extension; 
    } 

我做到了,不同的用戶會在/uploads/products中創建不同的文件。

此外我上傳原始圖片和調整大小,所以我應該有: picture.jpgthumb_picture.jpg

當沒有(從用戶的名稱)創建的自定義文件我得到這個錯誤:

Can't write image data to path (C:\xampp\htdocs\shop\public/uploads/products/book/thumb_Jellyfish.jpg)

當我評論6,7,8線,功能的作品,但它僅上傳原照片應該是。如果我刪除評論,縮略圖也可以工作!

所以我想,在創建自定義文件夾後,整個功能工作正常,但在它有一個可寫的問題之前。

任何想法?一切都將不勝感激!

回答

1

對於任何人想知道如何解決這個問題或做類似的東西,我只是找到了解決辦法:

if($file = $request->hasFile('image')) { 
     $file = $request->file('image'); 
     $extension = $file->getClientOriginalName(); 
     $username = Auth::user()->username; 
     $thumb = Image::make($file->getRealPath())->resize(100, 100, function ($constraint) { 
      $constraint->aspectRatio(); //maintain image ratio 
     }); 
     $destinationPath = public_path('/uploads/products/' . $username); 
     $file->move($destinationPath, $extension); 
     $thumb->save($destinationPath.'/thumb_'.$extension); 
     $product['imagePath'] = '/uploads/products/'. $username . '/' . $extension; 
     $product['thumbnail'] = '/uploads/products/'. $username . '/thumb_' . $extension; 
    } 

所以這段代碼使得動態文件夾(我選擇了身份驗證的用戶的用戶名)內/uploads/products/ 。在該文件夾中,它會上傳圖片並創建一個縮放後的縮略圖。另外,當它創建縮略圖時,它保留原始圖片的比例,因此它不會丟失比例。