上传的文件只包含“WebKitFormBoundary”

7

我不太清楚这里发生了什么。每次我尝试上传一个文件,文件中只包含:

------WebKitFormBoundaryJ0uWMNv89fcUsC1t--

我已经寻找了过去两天的解释,但是我一直在打转。我不知道为什么会出现这种情况。

表单:

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

Javascript:

$('#upload-button').click(function(e){
        e.preventDefault();
        var formData = new FormData($('#upload-file'));
        $.ajax({
            url: '/image',  
            type: 'POST',
            xhr: function() {  
                var myXhr = $.ajaxSettings.xhr();
                if(myXhr.upload){ 
                    myXhr.upload.addEventListener('progress',progressHandlingFunction, false);
                }
                return myXhr;
            },
            data: formData,
            cache: false,
           // contentType: false,
            processData: false
        });
    });

Controller:

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

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

然而,我在使用parse.temporaryFile时遇到了问题,它没有按照上述代码正确地存储文件。当我在文本编辑器中检查存储的文件时,我注意到它仍然以------WebKitFormBoundaryJ0uWMNv89fcUsC1t--开头,然后是表单信息,最后是文件字节。
为了解决这个问题,我只是按照Play文档中的默认方法进行了multipartform上传,并且它完美地工作了。
def image = Action(parse.multipartFormData)  { request =>
   request.body.file("picture").map { picture =>
      val filename = picture.filename
      picture.ref.moveTo(new File(s"/tmp/picture/$filename"))
      Ok("ok")
   }.getOrElse {
      InternalServerError("file upload error")
   }
}

1
这对我也起作用了。我甚至没有考虑过使用parse.temporaryFile来上传Ajax文档中所说的内容。https://www.playframework.com/documentation/2.0/ScalaFileUpload#Direct-file-upload - haffla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接