使用表单元素上传图像时出错 [英] Getting Error While Uploading image With form Elements
本文介绍了使用表单元素上传图像时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问题陈述:
我正在尝试上传图像以供用户注册.
I am trying to Upload an image for user register purpose.
当我上载窗体内没有任何窗体元素的图像时.它将正常运行.
When I upload an Image Without any Form element inside the Form. It will run properly.
但是当我尝试使用表单中的from元素上传图像时 会给我一个错误以获取更多信息,请参阅提供的代码和错误信息.
but when i am trying to upload image with from element inside the form it will give me an error for more info see the provided code and error info.
注册用户表格:
<form method="post" action="UploadServlet"
enctype="multipart/form-data">
username:<input type="text" name="username">
password:<input type="password" name="password">
city:<input type="text" name="city">
State:<input type="text" name="state">
Email:<input type="text" name="email">
Select file to upload: <input type="file" name="file" size="60" />
<br />
<br />
<input type="submit" value="Upload" />
</form>
Servlet:
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB
maxFileSize = 1024 * 1024 * 10, // 10MB
maxRequestSize = 1024 * 1024 * 50) // 50MB
public class UploadServlet extends HttpServlet {
private static final String SAVE_DIR = "uploadFiles";
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String appPath = request.getServletContext().getRealPath("");
String savePath = appPath + File.separator + SAVE_DIR;
File fileSaveDir = new File(savePath);
if (!fileSaveDir.exists()) {
fileSaveDir.mkdir();
}
for (Part part : request.getParts()) {
String fileName = extractFileName(part);
fileName = new File(fileName).getName();
part.write(savePath + File.separator + fileName);
}
request.setAttribute("message", "Upload has been done successfully!");
getServletContext().getRequestDispatcher("/userlist.jsp").forward(
request, response);
}
private String extractFileName(Part part) {
String contentDisp = part.getHeader("content-disposition");
String[] items = contentDisp.split(";");
for (String s : items) {
if (s.trim().startsWith("filename")) {
return s.substring(s.indexOf("=") + 2, s.length() - 1);
}
}
return "";
}}
错误:
java.io.IOException: java.io.FileNotFoundException: E:\New
Folder\UploadServlet30\build\web\uploadFiles (Access is denied)
net.codejava.servlet.UploadServlet.doPost(UploadServlet.java:46)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
java.io.FileNotFoundException: E:\New
Folder\UploadServlet30\build\web\uploadFiles (Access is denied)
java.io.FileOutputStream.open0(Native Method)
java.io.FileOutputStream.open(FileOutputStream.java:270)
java.io.FileOutputStream.<init>(FileOutputStream.java:213)
java.io.FileOutputStream.<init>(FileOutputStream.java:162)
org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.write(DiskFileItem. java:378)
net.codejava.servlet.UploadServlet.doPost(UploadServlet.java:46)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
servlet doPost方法中的
推荐答案
首先使用request.getParameter("inputname")检索所有参数.
in your servlet doPost method first retrive all parameters with request.getParameter("inputname").
之后,而不是使用foreach循环. 只写
after that instead of using foreach loop. write only
Part part = request.getPart("file");
String fileName = extractFileName(part);
part.write(savePath + File.separator + fileName);
这篇关于使用表单元素上传图像时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文