【问题标题】:Im trying to upload files using ajax and symfony我正在尝试使用 ajax 和 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-&gt;request-&gt;get('data') 在控制器中获取您的 POST 数据,然后查看您在 doc 中得到的内容:$doc = $data['doc']
  • 我试过了,$data 为空
  • 使用另一种方法检查您获得的 POST 参数:$data = $request->request->all()。如果您仍然得到空值,请检查您是否真的在发送文件。
  • 好吧,我又得到了 null,所以问题出在我想的 ajax 上?
  • 如何检查$data 变量?

标签: php jquery ajax symfony file-upload


【解决方案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');
    

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 2010-12-31
      • 1970-01-01
      • 2020-03-04
      • 2016-09-05
      • 2015-11-07
      • 1970-01-01
      • 2019-05-08
      • 2020-11-25
      相关资源
      最近更新 更多