我需要上传图片:
<form method="post" action="hi.iq/register.jsp" enctype="multipart/form-data">
Name: <input type="text" name="name" value="J.Doe">
file: <input type="file" name="file-upload">
<input type="submit">
</form>
在我的servlet中,我给了
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
System.out.println("user_id========= "+name);
但name
的值返回为NULL
。
请帮助
答案 0 :(得分:10)
尝试<input type="text" id="name" name="name" value="J.Doe">
。
编辑:
使用Apache Commons Fileupload的示例,如David的回答所示:
FileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints
// factory.setSizeThreshold(yourMaxMemorySize);
// factory.setRepository(yourTempDirectory);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload( factory );
// upload.setSizeMax(yourMaxRequestSize);
// Parse the request
List<FileItem> uploadItems = upload.parseRequest( request );
for( FileItem uploadItem : uploadItems )
{
if( uploadItem.isFormField() )
{
String fieldName = uploadItem.getFieldName();
String value = uploadItem.getString();
}
}
答案 1 :(得分:6)
尝试
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
Iterator<FileItem> iterator = upload.parseRequest(request).iterator();
File uploadedFile;
String dirPath="D:\fileuploads";
while (iterator.hasNext()) {
FileItem item = iterator.next();
if (!item.isFormField()) {
String fileNameWithExt = item.getName();
File filePath = new File(dirPath);
if (!filePath.exists()) {
filePath.mkdirs();
}
uploadedFile = new File(dirPath + "/" + fileNameWithExt);
item.write(uploadedFile);
}
else {
String otherFieldName = item.getFieldName();
String otherFieldValue = item.getString()
}
}
它需要Apache commons-fileupload.jar
和commons-io.jar
答案 2 :(得分:5)
我使用过的容器都不支持开箱即用的多部分编码请求。因此,它无法解析参数,您无法使用开箱即用的request.getParameter()。
您需要在服务器端使用某些内容,例如Apache Commons FileUpload来预处理请求
答案 3 :(得分:1)
null
返回的request.getParameter("name");
值是由于您在html表单中使用enctype="multipart/form-data"
这一事实。
这已经在post中得到了彻底的回答。
答案 4 :(得分:0)
添加Annotaion @ javax.servlet.annotation.MultipartConfig ,然后只需使用request.getParameter()就可以完美地工作。
或者如果您正在使用MultipartFormDataRequest,则使用其对象Like MultipartFormDataRequest mrequest; 取代前的请求。 mrequest.getParameter( “名称”);它有效。