尝试上传包含一些参数的文件,我已更改Ext upload plugin
以上传一些带有帖子参数的文件。
ext uploader
代码(ux.upload.uploader.FormDataUploader):
uploadItem : function(item) {
file = item.getFileApiObject();
item.setUploading();
formData = new FormData();
// mycode goes here to append some parameters
formData.append(file.name, file);
xhr = this.initConnection();
xhr.setRequestHeader(this.filenameHeader, file.name);
xhr.setRequestHeader(this.sizeHeader, file.size);
xhr.setRequestHeader(this.typeHeader, file.type);
var loadendhandler = Ext.Function.bind(this.onLoadEnd, this, [
item
], true);
var progresshandler = Ext.Function.bind(this.onUploadProgress, this, [
item
], true);
xhr.addEventListener('loadend', loadendhandler, true);
xhr.upload.addEventListener("progress", progresshandler, true);
xhr.send(formData);
},
initConnection : function() {
var xhr = new XMLHttpRequest(),
method = this.method,
url = this.url;
xhr.open(method, url, true);
this.abortXhr = function() {
this.suspendEvents();
xhr.abort();
this.resumeEvents();
};
return xhr;
},
我尝试了这两行代码:
formData.append("ali","ghasemi");
formData.append("alisd","ghassdf");
但是以下列方式将参数添加到请求有效负载中:
------WebKitFormBoundarylAKSY21NN15kqWct
Content-Disposition: form-data; name="ali"
ghasemi
------WebKitFormBoundarylAKSY21NN15kqWct
Content-Disposition: form-data; name="alisd"
ghassdf
------WebKitFormBoundarylAKSY21NN15kqWct
Content-Disposition: form-data; name="icon-info.gif"; filename="icon-info.gif"
Content-Type: image/gif
GIF89a
如何在服务器端获取post
参数或如何在客户端正确设置这些参数?
我在java spring中编码。 HttpServletRequest
不知道这些参数。
public JSONObject upload(HttpServletRequest request, HttpServletResponse response, @RequestBody String body) throws IOException {
String ali = request.getParameter("ali"); // returns null
}
Ext或纯javascript或Java spring controller
中的任何答案都将受到赞赏
这是一个相关的问题:formdata-appendkey-value-is-not-working
答案 0 :(得分:0)
您粘贴的请求有效负载是FormData的正确格式,我们也说多部分/表单数据。
在php中: 您可以使用$ _POST来获取这些参数,例如ali,alisd。 并使用$ _FILES获取上传文件。
答案 1 :(得分:0)
我找到了答案here
版本3.0之前的Servlet API默认不支持multipart / form-data编码的请求。 Servlet API默认使用application/x-www-form-urlencoded
编码解析参数。使用其他编码时,request.getParameter()
调用将全部返回null
。如果您已经使用Servlet 3.0(Glassfish 3,Tomcat 7等),那么您可以使用HttpServletRequest#getParts()
代替。另请参阅此博客以获取扩展示例。
在Servlet 3.0之前,解析multipart/form-data
请求的事实标准将使用 Apache Commons FileUpload 。只需仔细阅读其“用户指南”和“常见问题解答”部分,即可了解如何使用它。我在此之前发布了一个代码示例的答案(它还包含一个针对Servlet 3.0的示例)。
java代码:
Map properties = new HashMap();
List<FileItem> items;
items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) {
String fieldName = item.getFieldName();
String fieldValue = item.getString();
properties.put(fieldName, fieldValue);
} else {
String tempString = "d:/io";
//String fileName = FilenameUtils.getName(item.getName());
//fileNameWithOutExt = FilenameUtils.removeExtension(fileName);
file = new File(tempString + '/' + item.getName());
item.write(file);
}
}