2015-07-20 81 views
0

我想將通過表單上傳的文件保存到json文件中,因此我需要獲取通過Request或Input類方法輕鬆獲取的發佈數據。在laravel中找不到輸入類5

問題是無論何時我使用請求或輸入我無法獲取諸如getClientOriginalName之類的方法來獲取文件的名稱和文件的其他參數。

我FileController代碼如下:

<?php namespace App\Http\Controllers; 

use App\Http\Requests; 

use Illuminate\Http\Request;   // this handles both for Input and Request as in laravel 5.1 documentation 
use Illuminate\Support\Facades\Input; // though added some classes to get work 
use Illuminate\Support\Facades\File; // though added some classes to get work 
use Illuminate\Filesystem\Filesystem; // though added some classes to get work 

class FileController extends Controller 
{ 

public function index() 
{ 
    $files = $this->getAllData(); 
    return view('document.index', compact('files')); 
} 


public function create() 
{ 
    return view('document.create'); 
} 

public function store(Request $request) 
{ 

    $name = $request->input('title'); 

    echo $name; 

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

    if($request->hasFile('afile')) { 

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

     print_r($file); // return array of uploaded as expected 

     $filename = $file->getClientOriginalName(); // not working 

     // or 

     $filename = Input::file('afile')->getClientOriginalName(); // not working 

     echo $filename; 
    } 

    // print_r($file); 

    // $data= array('title'=>$name, 'afile'=>$file); 

    // $this->create_entry($data); 

    // return redirect('document'); 
} 
} 

僅供參考我的文件上傳SUCESSFUL,並已獲得文件數組作爲

Array ([0] => Symfony\Component\HttpFoundation\File\UploadedFile Object ([test:Symfony\Component\HttpFoundation\File\UploadedFile:private] => [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => new_file_1.txt [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => text/plain [size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0 [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0 [pathName:SplFileInfo:private] => E:\xampp\tmp\php5680.tmp [fileName:SplFileInfo:private] => php5680.tmp)) 

唯一的問題是我不能得到的Symphon2 API方法雖然我用

use Input; 

use Illuminate\Support\Facades\Input; 

輸入的每種方法都無法檢查其有效與否。

我引用的每個教程或來自laravel 5的文檔都使用了與我在代碼中使用的相同的教程。 因此,任何建議或解決方案真的很感激。

this文檔中使用的函數正在工作,但除此之外沒有其他方法。

+0

請確認dd($ request-> file('afile'));它似乎是空 –

+0

嘗試添加'使用Illuminate \ Support \ Facades \ Input'到您的使用語句 – Catharsis

+0

afile數組是: Array([0] => Symfony \ Component \ HttpFoundation \ File \ UploadedFile Object :Symfony \ Component \ HttpFoundation \ File \ UploadedFile:private] => [originalName:Symfony \ Component \ HttpFoundation \ File \ UploadedFile:private] => new_file_11.txt [mimeType:Symfony \ Component \ HttpFoundation \ File \ UploadedFile:private] => text/plain [size:Symfony \ Component \ HttpFoundation \ File \ UploadedFile:private] => 0 [error:Symfony \ Component \ HttpFoundation \ File \ UploadedFile:private] => 0 [pathName:SplFileInfo:private] => E:\ xampp \ tmp \ php2B0C.tmp [fileName:SplFileInfo:private] => php2B0C.tmp)) – rjndra

回答

1

您錯過了輸入外觀的使用語句。將以下內容添加到您的使用說明中。

use Illuminate\Support\Facades\Input; 
+0

仍然出錯: FileController.php中的FatalErrorException第36行: 調用成員函數getClientOriginalName()非對象 – rjndra

0

這對我的作品

\Input::file('file')->getClientOriginalName(); 
+0

可以看到我的問題已經檢查。沒有解決方案:( – rjndra

+0

比確定您的文件沒有上傳 – rohitarora

1

你可以試試這個:

$filename = $file->getClientOriginalName(); 

既然你已經使用了以下內容:

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

file方法返回一個012的實例,在這種情況下,該實例已被緩存在$file變量中。

此外,以確保上傳成功,你可以使用這樣的檢查:第一

if($request->hasFile('afile')) { 

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

    $filename = $file->getClientOriginalName() .'.'. $file->getExtension(); 
} 
+0

$ request-> hasFile('afile')返回true,但行 $ filename = $ file-> getClientOriginalName()。'。'。$ file- > getExtension(); 仍然沒有工作 – rjndra

+0

這個API http://api.symfony.com/2.7/Symfony/Component/HttpFoundation/File/UploadedFile.html 是不是在我laravel 5 intregrating我有這個文件在我的供應商文件夾中。 – rjndra

0

在您的形式打開的標籤添加'files' => true

{!! Form::open(array('files' => true, ....)) !!} 

在控制器檢查,如果該文件已正確上傳

if (!Input::file('afile')->isValid()) 
{ 
    // return error 50x 
} 

$filename = Input::file('afile')->getClientOriginalName(); 

不能將方法應用於非對象意味着Input :: file(...)返回null,因此文件未上傳或不存在。然後,當你從空值調用->getClientOriginalName()時,php會拋出一個異常。

+0

代碼 輸入::文件('afile') - > isValid() 本身不起作用 – rjndra

+0

我也有這個也不工作 laravel5有關於這個錯誤,或者可能是一些在我的代碼中,我的眼睛沒有得到你的小錯誤噸。 – rjndra