javascript – 上传的文件只包含“WebKitFormBoundary”

前端之家收集整理的这篇文章主要介绍了javascript – 上传的文件只包含“WebKitFormBoundary”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我真的不知道这里发生了什么.每次我尝试上传文件时,所有文件都包含:

—— WebKitFormBoundaryJ0uWMNv89fcUsC1t–

搜索了过去两天的某些解释,但我只是在圈子里.我不知道为什么会这样.

形成:

  1. <form id="upload-file" ecntype="multipart/form-data">
  2. <input name="picture" type="file">
  3. <input type="button" value="Upload" id="upload-button" />
  4. </form>

使用Javascript:

  1. $('#upload-button').click(function(e){
  2. e.preventDefault();
  3. var formData = new FormData($('#upload-file'));
  4. $.ajax({
  5. url: '/image',type: 'POST',xhr: function() {
  6. var myXhr = $.ajaxSettings.xhr();
  7. if(myXhr.upload){
  8. myXhr.upload.addEventListener('progress',progressHandlingFunction,false);
  9. }
  10. return myXhr;
  11. },data: formData,cache: false,// contentType: false,processData: false
  12. });
  13. });

控制器:

  1. def image = Action(parse.temporaryFile) { request =>
  2. request.body.moveTo(new File("/tmp/picture"))
  3. Ok("File uploaded")
  4. }

解决方法

问题出现在Javascript中,而不是Scala中.我没有不恰当地引用表单元素.
  1. var formData = new FormData($('#upload-file')[0]);

但是,我也遇到了parse.temporaryFile的问题,并且没有使用上面的代码正确存储文件.当我在文本编辑器中检查存储的文件时,我注意到它仍然在文件的开头有—— WebKitFormBoundaryJ0uWMNv89fcUsC1t–,然后是表单信息,然后是文件字节.

为了解决这个问题,我根据Play Documentation使用了默认方法进行多部分上传,它运行得很好.

  1. def image = Action(parse.multipartFormData) { request =>
  2. request.body.file("picture").map { picture =>
  3. val filename = picture.filename
  4. picture.ref.moveTo(new File(s"/tmp/picture/$filename"))
  5. Ok("ok")
  6. }.getOrElse {
  7. InternalServerError("file upload error")
  8. }
  9. }

猜你在找的JavaScript相关文章