我是servlet新手。我想做的是使用servlet将文件上传到我的服务器,同时我发送一个文本值,即在服务器端更改的文件名。问题是我使用ajax帖子将表单数据提交给servlet,但在我的servlet中,我从request.get参数中获取空值。
这是我的html;
$("#fileUp").html( "<form enctype='multipart/form-data' id='uploadForm' action='" + url + "/PrjHRService/FileUpload'>"+
"<input name='file' id='file' type='file' size='50'>"+
"<input name='fname' type='text' >"+
"<input id='btnUpload' value='Upload' type='submit'>"+
//"<div id='imgLink'></div>"+
"</form>" );
这是我对服务器的jquery ajax调用;
$("#uploadForm").submit(function() {
var formData = new FormData($(this)[0]);
$.ajax({
type: "POST",
url: $("#uploadForm").attr("action"),
data: formData,
async: false,
success: function(data)
{
if(data.res === "true"){
jsi.showMsg("Uploaded Successfully");
$("#imgLink").html("Uploaded Successfully");
}else{
jsi.showMsg("Error Uploading");
}
},
contentType: false,
processData: false
});
return false; // avoid to execute the actual submit of the form.
});
这就是我如何从servlet中的表单中获取值;在这里,您将看到一行字符串fileExt=request。getParameter(“fname”);我发现fileExt为null,这是我的问题。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
// Check that we have a file upload request
isMultipart = ServletFileUpload.isMultipartContent(request);
response.setContentType("application/json");
String fileExt=request.getParameter("fname");
java.io.PrintWriter out = response.getWriter( );
if( !isMultipart ){
JSONObject o=new JSONObject();
try {
o.put("res", "false");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.println(o.toString());
return;
}
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File("c:\\temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
try{
// Parse the request to get file items.
List fileItems = upload.parseRequest(request);
// Process the uploaded file items
Iterator i = fileItems.iterator();
while ( i.hasNext () )
{
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () )
{
// Get the uploaded file parameters
String fieldName = fi.getFieldName();
String fileName = fi.getName();
//String[] parts = fileName.split(".");
//fileName = parts[0] + "." + parts[1];
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\") >= 0 ){
file = new File( filePath +
fileName.substring( fileName.lastIndexOf("\\"))) ;
}else{
file = new File( filePath +
fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
JSONObject o=new JSONObject();
o.put("res", "true");
//out.println("Uploaded Filename: " + fileName + "<br>");
out.println(o.toString());
//out.println("Uploaded Successfully");
}
}
/* out.println("</body>");
out.println("</html>");*/
}catch(Exception ex) {
System.out.println(ex);
}
}
如果要上传文件,
您必须记住,将
POST
与enctype="multipart/from-data"
一起使用会将所有表单的参数添加到POST正文中,这与enctype="Application/x-www-form-urlencoded"
不同,其中参数连接到请求URL(QUERY_STRING)。方法getParameter
仅适用于通过URL发送的参数。因此,在您的情况下,您需要读取POST数据,解析它并找出fname
的值。POST可能如下所示:
-----------------------------8022333619518
Content-Disposition: form-data; name="fname"
myfilename.txt
-----------------------------8022333619518
Content-Disposition: form-data; name="submit"
Send
-----------------------------8022333619518--
如果您手动将一些参数添加到URL中,则getParameter方法将找到它。
由于你没有上传任何文件(不是吗?)您可以将应用程序设置为使用getParameter,因为它将所有表单的输入添加到URL。但您的代码表明,您稍后将上载文件,因此它对文件内容无效。
当您从Apache使用
ServletFileUpload
时,您可以看到parseParameterMap方法,获取map,然后获取fname
参数(它应该是列表中的第一个元素)作为FileItem
并使用getString
获取其内容。它应该是您正在寻找的:
Map<String, List<FileItem>> map = ServletFileUpload.parseParameterMap(request);
List<FileItem> list = map.get("fname");
if (list != null && list.size() >= 1) {
FileItem item = list.get(0);
System.out.println("And the winner is... " + item.getString);
}
else {
System.out.println("Dammit! Still no luck!");
}
问题内容: 我的函数中有一个简单的表单,如下所示: 我应该在访问和字段中写些什么? 问题答案: 使用输入上的事件来更新组件的状态并在以下位置访问它: 工作提琴。 另外,阅读文档,有一整节专门讨论表单处理:表单 以前,您还可以使用React的双向数据绑定帮助器mixin来实现相同的功能,但是现在不建议使用它来设置值和更改处理程序(如上所述): 文档在这里:双向绑定帮助器。
使用以下字段设计薪资类: •name:包含员工姓名的字符串•idNumber:表示员工ID号的int值•rate:包含员工时薪率的double值•hours:表示该员工工作时数的int值 类还应具有以下方法: 谢谢你的帮助...
我正在尝试使用spring data JPA repository方法在数据库中插入4个表单字段name、age、location和address。当我将表单提交到操作时,控制器不会无法接收提交的值。在控制器操作中获取null。在这里,我尝试使用spring、spring boot和spring data JPA。下面是我的控制器, 我的形式是, 导入javax.persistence.*;
问题内容: 我需要从表单获取数据。 我使用JavaScript创建表单: 那么我需要从输入字段中获取数据。 这是我的视图函数: 但我得到一个错误: 帮我从表格中获取数据。 问题答案: 从Flask的请求对象获取表单数据: 你还可以设置默认值以避免400错误,如下所示:
我想在窗体的操作重定向它之前从窗体中获取值。例如,在这个表单中,我想抓取“text_one”并将其发送到数据库,然后再将其重定向到google。我还想在谷歌上看到“text_one”。我该怎么办?
问题内容: 如何获得HTML表单的值以传递给JavaScript? 它是否正确?我的脚本有两个参数,一个来自文本框,一个来自下拉框。 问题答案: HTML: JS: