symfony2和dropzone.js可以解决问题

时间:2013-12-02 12:43:34

标签: javascript php symfony

我有一个上传文件的应用程序。 我正在使用Dropzone.js脚本,我在这里找到一个答案,使其与symfony一起工作。

控制器:

    public function indexAction() {
        return $this->render('testDropzoneBundle:Default:index.html.twig');
    }

    public function uploadAction() {
        $request = $this->get('request');
        $files = $request->files;

        foreach ($files as $uploadedFile) {
            $name = uniqid();
            $em = $this->getDoctrine()->getManager();
            $f = new File();
            $f->setName(($uploadedFile->getClientOriginalName());
            $f->setFile($uploadedFile);
            $f->preUpload();
            $f->upload();
            $em->persist($f);
            $em->flush();
        }
        return new Response($name);
    }

和视图:

<form action="{{ path('upload') }}" method="post" class="dropzone">
<div class="fallback" id="mydropzone">
    <input name="file" type="file" multiple />
</div>

但现在我想为我在页面上拖动的每个文件设置一个名称。 我想显示一个询问姓名的对话框。 像这样: dropzone.js第538行

var myName = prompt('Enter the name for file '+file.name);
file.name = myName;

但是如何将脚本中的名称发送给控制器?

1 个答案:

答案 0 :(得分:0)

您需要将名称发送到php脚本。你有2 options

  1. Dropzone将提交您在dropzone表单中隐藏的任何字段
  2. 在上传时将文件名附加到表单数据
  3. 您还可以使用params选项
  4. 如果您使用第一个,在上传之前,提示用户输入文件名,一旦您获得文件名动态地向表单附加隐藏的输入,就像这样(尚未测试):

    var name = prompt('Name the file');
    
    $('#myDropzoneForm').append('<input type="hidden" name="clientFilename" value="' + name + '"');
    

    选项2:

    var myDropzone = new Dropzone('div#myId', { url: "/file/post" });
    
    myDropzone.on('sending', function(file, xhr, formData) {
        var name = prompt('Name the file');
        formData.append('clientFilename', name);
    });