tia*_*mat 1 java forms jsp servlets
我有一个包含表单的JSP
<form action="upload" method="post" enctype="multipart/form-data">
<fieldset>
<input name="nom" class="input-xlarge focused" id="nom" type="text" value="">
<input name="date" class="input-xlarge focused" id="date" type="text" value="">
<input type="file" name="file" />
<button type="submit" class="btn btn-primary">Envoi</button>
</fieldset>
</form>
Run Code Online (Sandbox Code Playgroud)
其中包含2个字段(nom和date),还要求在服务器上上传文件.
在servlet方面,我有以下内容:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String UPLOAD_DIRECTORY = request.getServletContext().getRealPath("/")+"imgs/";
//process only if its multipart content
if(ServletFileUpload.isMultipartContent(request)){
String nom = request.getParameter("nom");
String date = request.getParameter("date");
log.debug("upload parameters: "+nom+" "+date);
try {
List<FileItem> multiparts = new ServletFileUpload(
new DiskFileItemFactory()).parseRequest(request);
for(FileItem item : multiparts){
if(!item.isFormField()){
String name = new File(item.getName()).getName();
item.write( new File(UPLOAD_DIRECTORY + File.separator + name));
}
}
//File uploaded successfully
request.setAttribute("message", "File Uploaded Successfully");
log.debug("File updated successfully");
} catch (Exception ex) {
request.setAttribute("message", "File Upload Failed due to " + ex);
log.debug("File upload failed: "+ex);
}
}else{
request.setAttribute("message",
"Sorry this Servlet only handles file upload request");
log.debug("file upload only !");
}
//request.getRequestDispatcher("/result.jsp").forward(request, response);
}
Run Code Online (Sandbox Code Playgroud)
文件上传工作正常,但我无法使用request.getParameter检索我的两个参数(nom和日期).
我可以检索multipart/form-data中的参数吗?我怎样才能做到这一点 ?
使用enctype="multipart/form-data"时无法通过使用直接获取参数request.getParameter("nom");.
在这种情况下,表单字段不可用作请求的参数,它们包含在流中,因此您需要从流中获取它们.一种可能的方法是使用commons-fileupload.以下是官方文档中的示例代码(请参阅"处理上传的项目"部分)
// Process the uploaded items
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (item.isFormField()) {
processFormField(item);
} else {
processUploadedFile(item);
}
}
Run Code Online (Sandbox Code Playgroud)
对于常规表单字段
// Process a regular form field if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8459 次 |
| 最近记录: |