我有一个上传文件的应用程序。 我正在使用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;
但是如何将脚本中的名称发送给控制器?
答案 0 :(得分:0)
您需要将名称发送到php脚本。你有2 options:
params
选项如果您使用第一个,在上传之前,提示用户输入文件名,一旦您获得文件名动态地向表单附加隐藏的输入,就像这样(尚未测试):
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);
});