我正在尝试使用 ajax 和 symfony 上传文件
Posted
技术标签:
【中文标题】我正在尝试使用 ajax 和 symfony 上传文件【英文标题】:Im trying to upload files using ajax and symfony 【发布时间】:2018-05-24 03:21:09 【问题描述】:我正在使用 Symfony 2.7
我收到了这个表格
<form name="Document" method="post" action enctype="multipart/form-data">
<div class="col-md-6">
<input type="file" id="documento" name="Document[Ruta]" required="required">
</div>
<div class="col-md-3">
<button type="button" onclick="saveDoc()" class="btn btn-success" data-dismiss="modal">Subir</button>
</div>
</form>
还有这个 ajax:
function saveDoc()
var inputFile = document.getElementById('documento');
var file = inputFile.files[0];
var data = new FormData();
data.append('doc', file, file.name);
$.ajax(
url: " path('fileupload') ",
type: "POST",
data: 'data': data,
processData: false,
contentType: false,
cache: false
);
使用这个 symfony 控制器:
public function fileUpload(Request $request)
$file = $request->files->get('doc')->getClientOriginalName;
$user = $this->getUser();
$filename = md5(uniqid()).'.'.$file->guessExtension();
$request->files->get('doc')->move(
$this->getParameter('upload_directory'),
$filename
);
$document = new Document();
$document->setRuta($filename);
$document->setIdUser($user);
$document->setFechaCreacion(new \DateTime("now"));
$em = $this->getDoctrine()->getManager();
$em->persist($document);
$em->flush();
return new JsonResponse(true);
但我收到此错误:
注意:试图获取非对象的属性 500 内部服务器错误 - ContextErrorException
我看到 235897 个页面使用 symfony 和 ajax 上传文件,我不明白我的代码有什么问题,你们能帮帮我吗?
【问题讨论】:
您正在通过 POST 请求发送data
数据,但稍后在控制器中尝试获取 doc
。尝试通过调用 $data = $request->request->get('data')
在控制器中获取您的 POST 数据,然后查看您在 doc
中得到的内容:$doc = $data['doc']
我试过了,$data 为空
使用另一种方法检查您获得的 POST 参数:$data = $request->request->all()
。如果您仍然得到空值,请检查您是否真的在发送文件。
好吧,我又得到了 null,所以问题出在我想的 ajax 上?
如何检查$data
变量?
【参考方案1】:
改变这个
function saveDoc()
var inputFile = document.getElementById('documento');
var file = inputFile.files[0];
var data = new FormData();
data.append('doc', file, file.name);
$.ajax(
url: " path('fileupload') ",
type: "POST",
data: 'data': data,
processData: false,
contentType: false,
cache: false
);
到
function saveDoc()
var inputFile = document.getElementById('documento');
var file = inputFile.files[0];
var data = new FormData();
data.append('doc', file, file.name);
$.ajax(
url: " path('fileupload') ",
type: "POST",
data: data,
processData: false,
contentType: false,
cache: false
);
在控制器中
更改以下行:
$file = $request->files->get('doc')->getClientOriginalName;
到:
$file = $request->files->get('doc');
【讨论】:
【参考方案2】:改变
$file = $request->files->get('doc')->getClientOriginalName;
到
$file = $request->files->get('doc');
【讨论】:
以上是关于我正在尝试使用 ajax 和 symfony 上传文件的主要内容,如果未能解决你的问题,请参考以下文章