我正在尝试将FineUploader集成到我的播放框架代码中。视图部件设置正确,工作正常。
我不清楚如何在控制器上传方法中检索文件。和其他查询参数,qquuid,qqfilename,content-type e.tc。
以下是FileUploader发送的文件上传请求转储: -
Request Headers
Accept:application/json
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:1021645
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryk8BZISBKKjjqiWQ6
DNT:1
Host:localhost:9000
Origin:http://localhost:9000
Referer:http://localhost:9000/computers
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payload
------WebKitFormBoundaryk8BZISBKKjjqiWQ6
Content-Disposition: form-data; name="id"
593
------WebKitFormBoundaryk8BZISBKKjjqiWQ6
Content-Disposition: form-data; name="qquuid"
bafb6448-1a87-40cc-abae-9624f37131cc
------WebKitFormBoundaryk8BZISBKKjjqiWQ6
Content-Disposition: form-data; name="qqfilename"
Test.png
------WebKitFormBoundaryk8BZISBKKjjqiWQ6
Content-Disposition: form-data; name="qqtotalfilesize"
1020995
------WebKitFormBoundaryk8BZISBKKjjqiWQ6
Content-Disposition: form-data; name="qqfile"; filename="Test.png"
Content-Type: image/png
------WebKitFormBoundaryk8BZISBKKjjqiWQ6--
答案 0 :(得分:0)
我最终通过探索play apis,下面的示例代码找到了。
Http.MultipartFormData body = request().body().asMultipartFormData();
Http.MultipartFormData.FilePart uploadFilePart = body.getFile("qqfile");
String fileName = uploadFilePart.getFilename();
File file = uploadFilePart.getFile();
Map<String,String[]> dataPart = request().body().asMultipartFormData().asFormUrlEncoded();
Iterator it = dataPart.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
String[] values = (String[]) pair.getValue();
System.out.println(pair.getKey() + " = " + values[0]);
}
答案 1 :(得分:-1)
我以前的评论表明,http postloup可能会出现问题,但当然这是错误的。我试图将传统的端点示例代码调整为Spring 4.x MVC控制器,并从Apache Commons FileUpload库中获取空的FileItem列表。下载Spring的源代码并通过它进行调试后,发现Spring MVC使用相同的Apache Commons FileUpload库来获取http post请求,直到它到达我的控制器代码。对Apache的FileUpload.parseRequest的第二次调用返回一个空的FileItem列表,因为它已被使用。我不得不重新调整控制器代码的使用,以便为请求参数使用正确的签名。我发现让MVC框架为我解析工作最容易。在重构之后,我仍然能够将大部分示例代码用于传统端点。例如,我的控制器
var App = React.createClass({
getInitialState: function() {
return {
client: null
}
},
// the rest of the code is same
render: function() {
const { client } = this.state;
if(client === null) {
return (<div></div>); // or return null
}
return (
<div>
{client.Memory.Available}
</div>
)
}
});
修改其余代码以生成我自己的类来替换FileItem(在我的情况下称为类“FineUploaderItem”),重构RequestParser以及Multipart解析如何工作使我的服务器端点工作。我能够在我的代码中使用UploadReceiver类中的所有私有方法,在此之后进行很少的修改,并且一切正常。