我想将通过表单上传的文件保存到json文件中,因此我需要获取可以通过Request或Input类方法轻松获取的帖子数据。
问题是每当我使用请求或输入时,我都无法获取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');
}
}
仅供参考我的文件上传成功,文件数组为
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 :(得分:1)
您缺少输入外观的use语句。将以下内容添加到您的使用语句中。
use Illuminate\Support\Facades\Input;
答案 1 :(得分:1)
你可以试试这个:
$filename = $file->getClientOriginalName();
由于您已经使用了以下内容:
$file = $request->file('afile');
file
方法返回Symfony\Component\HttpFoundation\File\UploadedFile
的实例,在这种情况下,实例已经缓存在$file
变量中。
另外,为了确保上传成功,您可以使用以下内容进行检查:
if($request->hasFile('afile')) {
$file = $request->file('afile');
$filename = $file->getClientOriginalName() .'.'. $file->getExtension();
}
答案 2 :(得分:0)
这对我有用
\Input::file('file')->getClientOriginalName();
答案 3 :(得分: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会抛出异常。