2015-07-20 82 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