我试图通过ajax将图像文件和相应的信息传输到groovlet-server。
问题: 我无法从HTTPServletRequest对象中获取数据。
以下是我用来传输数据的Javascript代码:
$("#submitButton").click( function(){
if ( submitButtonCondition == true ) {
//Gathering Data
var enabledValue = false;
if ($("#activate").val()){
enabledValue = true;
}
var metadata = $("#metaTextarea").val();
var inputFile = $("#fileInput")[0].files[0];
// Creating FormData-Object filled with necessary Data
var formData = new FormData();
formData.append('file', inputFile);
formData.append('enabled', enabledValue);
formData.append('metadata', metadata);
// Sending FormData to Server
$.ajax({
type : 'POST',
url : '/createNewEntry.groovy',
contentType: false,
processData: false,
data: formData,
success: function(resultData){
console.log("Upload successful");
},
failure: function(resultData){
console.log("Upload failed");
}
});
}
});
验证数据是否已发送的唯一方法是访问请求对象的附加阅读器:System.out.println(request.reader.text);
输出如下:
------WebKitFormBoundaryzNUfRksUAVW2ioCa
Content-Disposition: form-data; name="file"; filename="blatest.png"
Content-Type: image/png
------WebKitFormBoundaryzNUfRksUAVW2ioCa
Content-Disposition: form-data; name="enabled"
true
------WebKitFormBoundaryzNUfRksUAVW2ioCa
Content-Disposition: form-data; name="metadata"
asdfasdfasdf
------WebKitFormBoundaryzNUfRksUAVW2ioCa--
显然数据已被转移?
尽管如此,我仍在努力从方法getParameter, getParameterMap, getParameterNames, getParameterValues
中获取信息,这些方法都没有给我任何输出。
答案 0 :(得分:0)
你得到了服务器端多部分请求
通常你的request
应该是instanceof
http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html
你可以使用方法:
Part getPart(java.lang.String name)
获取具有给定名称的Part。java.util.Collection<Part> getParts()
答案 1 :(得分:0)
使用以下外部库管理以获取部件:
org.apache.commons.fileupload
org.apache.commons.io
代码看起来像这样:
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Figure out ServerContext
ServletContext servletContext = context;
// Configure a repository (to ensure a secure temp location is used)
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
// Set factory constraints
factory.setSizeThreshold(50000);
factory.setRepository(repository);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
List<FileItem> items = upload.parseRequest(request);
// Process the uploaded items
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next()
if (item.isFormField()) {
processFormField(item);
} else {
processUploadedFile(item, servletContext);
}
}
request
和response
与groovlet对象相关。
方法processFormField()
和ProcessUploadedFile()
可以访问表格 - 数据和缓存文件。
processFormField()
以下列方式访问信息:
private void processFormField(FileItem item) {
String name = item.getFieldName()
String value = item.getString()
if (name=="enabled") {
queryEnabledValue=value;
}
if (name=="metadata") {
queryMetadata=value;
}
}