2016-02-13 25 views
1

編輯:事實證明,這個問題發生時,試圖上傳.sql文件。這不是文件名。Laravel:數組到字符串轉換,同時上傳.sql文件

當我嘗試上傳文件這個名字:forge_2016-02-08_--USERS THOUGH.sql我下面所示的這個錯誤:

ErrorException在FileinfoMimeTypeGuesser.php線69:

陣列字符串轉換

and

HandleExceptions-> handleError('8','Array to string conversion','/home/forge/example.com/vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php','69',array( '路徑'=> '/ TMP/phppkDGK8', 'FINFO'=>對象在FileinfoMimeTypeGuesser.php線(FINFO)))

在finfo->文件( '/ TMP/phppkDGK8')69

在finfo->在FileinfoMimeTypeGuesser.php線文件( '/ tmp目錄/ phppkDGK8')69 在FileinfoMimeTypeGuesser->在MimeTypeGuesser.php線猜想( '/ tmp目錄/ phppkDGK8')139

我不知道爲什麼這個錯誤正在發生。這裏是我的上傳代碼:

$baseDir = storage_path('uploads'); 

    $file = $request->file('file'); 
    $mimeType = $file->getMimeType(); 
    $name = str_random(6) . time() . '-' . str_replace(' ', '_', Str::ascii($file->getClientOriginalName())); 
    $file->move($baseDir, $name); 

    $path = $baseDir . '/' . $name; 
    $data = ['path' => $path, 'ip' => userIP(), 'name' => $file->getClientOriginalName(), 'mime' => $mimeType, 'size' => $file->getClientSize()]; 
    $status = Uploads::create($data); 

    if ($status) { 
      $su = true; 

請幫幫忙。我不知道爲什麼會發生這種情況。

+0

你真的想遵循你使用的'$ name'約定嗎? –

+0

@JilsonThomas是的,爲什麼?它有什麼問題嗎? –

+0

我懷疑錯誤是否存在。你可以嘗試'dd('ok');'創建$ name之前和之後?只是爲了看看錯誤在哪裏。 ? –

回答

1

我固定它通過改變

$mimeType = $file->getMimeType(); 

$mimeType = $file->getClientMimeType(); 

這個固定。

+0

方法名getClientMimeType聽起來像這樣只會讓你獲得客戶端發送的MIME類型 - 這可能是危險的,因爲它可能允許某人上傳你不想要的類型的文件,通過簡單地僞造MIME類型。所以這不僅僅是我所稱的問題的「修復」。 – CBroe

+0

如果該文件是一個sql文件或根本沒有擴展名,則使用'getMimeType'會顯示數組以字符串轉換錯誤。他們上傳的文件存儲在存儲文件夾中。如果我允許他們上傳任何類型的文件,並將其存儲在存儲文件夾中而不運行它,那對我有什麼危險?我只是好奇。謝謝。 –

+0

所以你甚至會允許用戶上傳'.php'文件?通過它的外觀看起來你保留了原始的文件擴展名 - 所以如果這些上傳文件進入可通過HTTP訪問的目錄並且PHP代碼像往常一樣在以.php結尾的文件中解析,用戶可以上傳並執行_any_任意PHP代碼他們喜歡... – CBroe