Java jspservlet文件上传doGet
我可以使用ApacheCommonsFileUpload在servlet中上传文件。下面的代码在servlet的processRequest方法中工作,但我将代码复制粘贴到doPost方法中,现在它不再工作了。线路Java jspservlet文件上传doGet,java,jsp,servlets,file-upload,apache-commons,Java,Jsp,Servlets,File Upload,Apache Commons,我可以使用ApacheCommonsFileUpload在servlet中上传文件。下面的代码在servlet的processRequest方法中工作,但我将代码复制粘贴到doPost方法中,现在它不再工作了。线路 List fileItems = upload.parseRequest(request); 生成文件项的空数组。 这怎么可能 下面是完整的doPost方法 @Override protected void doPost(HttpServletRequest request, H
List fileItems = upload.parseRequest(request);
生成文件项的空数组。
这怎么可能
下面是完整的doPost方法
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int fileId = 0;
String LogicalName = "";
String PartNr = "";
String Cost = "";
String Assembly = "";
String Comment = "";
try {
Connection conn = MysqlConnect.conn();
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) { //als het een veld is dan dit, anders File uploaden
String fieldname = item.getFieldName();
String fieldvalue = item.getString();
switch (fieldname) {
case "logicalName":
LogicalName = fieldvalue;
break;
case "partNr":
PartNr = fieldvalue;
break;
case "cost":
Cost = fieldvalue;
break;
case "assembly":
Assembly = fieldvalue;
break;
case "comments":
Comment = fieldvalue;
break;
}
} else {
PrintWriter out = response.getWriter();
File file;
int maxFileSize = 500000 * 1024;//max 500 mb groot
int maxMemSize = 5000 * 1024;//max 5mb gecached in het ram,indien file groter is eerst wegschrijven in een temp dir
String filePath = "C:\\uploads\\";
String fileName = "";
String contentType = request.getContentType();
if ((contentType.indexOf("multipart/form-data") >= 0)) {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(maxMemSize);
factory.setRepository(new File("c:\\temp"));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxFileSize);
try {
List fileItems = upload.parseRequest(request);
Iterator i = fileItems.iterator();
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
if (!fi.isFormField()) {
String fieldName = fi.getFieldName();
fileName = fi.getName();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
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);
}
}
HttpSession session = request.getSession();
int uploader = (Integer) session.getAttribute("UserId");
String Query = "Insert into tbl_file (fileLocation,Uploader)values(\"" + fileName + "\"," + uploader + ");";
PreparedStatement st = conn.prepareStatement(Query, Statement.RETURN_GENERATED_KEYS);
st.executeUpdate();
ResultSet rs = st.getGeneratedKeys();
if (rs.next()) {
fileId = rs.getInt(1);
}
} catch (Exception ex) {
System.out.println(ex);
}
}
}
}
if (fileId == 0) {
//ERROR
} else {
Statement stmt = conn.createStatement();
String Query1 = "Insert into tbl_part (partCad,partCost,partAssembly,partMotivation,partOf) VALUES(" + fileId + "," + Cost + "," + Assembly + ",\"" + Comment + "\"," + "1" + ");";
stmt.executeUpdate(Query1);
}
MysqlConnect.close(conn);
} catch (SQLException ex) {
Logger.getLogger(UploadServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (FileUploadException e) {
throw new ServletException("Cannot parse multipart request.", e);
}
String URL = "/home.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(URL);
dispatcher.forward(request, response);
}
@覆盖
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
int fileId=0;
字符串LogicalName=“”;
字符串PartNr=“”;
字符串成本=”;
字符串组合=”;
字符串注释=”;
试一试{
Connection conn=MysqlConnect.conn();
列表项=新建ServletFileUpload(新建DiskFileItemFactory()).parseRequest(请求);
用于(文件项:项){
如果(item.isFormField()){//als het een veld是dan dit,则anders文件上载
字符串fieldname=item.getFieldName();
String fieldvalue=item.getString();
交换机(字段名){
案例“logicalName”:
LogicalName=字段值;
打破
案例“partNr”:
PartNr=字段值;
打破
案例“成本”:
成本=现场价值;
打破
案例“组装”:
汇编=字段值;
打破
案例“评论”:
注释=字段值;
打破
}
}否则{
PrintWriter out=response.getWriter();
文件;
int maxFileSize=500000*1024;//最大值为500 mb groot
int maxmesize=5000*1024;//在het ram中最大缓存5mb,在een temp dir中,indien文件groter是eerst wegschrijven
String filePath=“C:\\uploads\\”;
字符串fileName=“”;
String contentType=request.getContentType();
if((contentType.indexOf(“多部分/表单数据”)>=0)){
DiskFileItemFactory=新的DiskFileItemFactory();
factory.setSizeThreshold(maxMemSize);
setRepository(新文件(“c:\\temp”);
ServletFileUpload upload=新的ServletFileUpload(工厂);
upload.setSizeMax(maxFileSize);
试一试{
List fileItems=upload.parseRequest(请求);
迭代器i=fileItems.Iterator();
while(i.hasNext()){
FileItem fi=(FileItem)i.next();
如果(!fi.isFormField()){
字符串fieldName=fi.getFieldName();
fileName=fi.getName();
布尔值isInMemory=fi.isInMemory();
long-sizeInBytes=fi.getSize();
如果(fileName.lastIndexOf(“\\”>)=0){
文件=新文件(文件路径
+fileName.substring(fileName.lastIndexOf(“\\”);
}否则{
文件=新文件(文件路径
+fileName.substring(fileName.lastIndexOf(“\\”+1));
}
fi.写入(文件);
}
}
HttpSession session=request.getSession();
int uploader=(整数)session.getAttribute(“UserId”);
String Query=“插入tbl_文件(文件位置,上传程序)值(\”“+fileName+”\“,“+Uploader+”)”;
PreparedStatement st=conn.prepareStatement(查询、语句、返回\u生成的\u键);
st.executeUpdate();
ResultSet rs=st.getGeneratedKeys();
如果(rs.next()){
fileId=rs.getInt(1);
}
}捕获(例外情况除外){
系统输出打印项次(ex);
}
}
}
}
if(fileId==0){
//错误
}否则{
语句stmt=conn.createStatement();
String Query1=“插入tbl\U零件(零件CAD、零件成本、零件装配、零件动机、零件OF)值(“+fileId+”、“+Cost+”、“+Assembly+”、\”“+Comment+”、“+1+”);”;
stmt.executeUpdate(查询1);
}
MysqlConnect.close(连接);
}catch(SQLException-ex){
Logger.getLogger(UploadServlet.class.getName()).log(Level.SEVERE,null,ex);
}捕获(文件上载异常){
抛出新的ServletException(“无法解析多部分请求。”,e);
}
字符串URL=“/home.jsp”;
RequestDispatcher=getServletContext().getRequestDispatcher(URL);
转发(请求、响应);
}
这是JSP
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>File Uploading Form</title>
</head>
<body>
<h3>File Upload:</h3>
Select a file to upload: <br />
<form action="/Racing/UploadServlet" method="post"
enctype="multipart/form-data">
<input type="file" name="file" />
<br />
Logische Naam: <input type="text" name="logicalName"><br>
Stuknr(automatisch,nog niet geimplementeerd): <input type="text" name="partNr"><br>
Kost: <input type="text" name="cost"><br>
Assembly:
<select name = "assembly">
<c:forEach var ="assembly" items="${Assemblys}">
<option value="${assembly.id}">${assembly.name}</option>
</c:forEach>
</select>
<br>
<textarea name="comments" cols="25" rows="5">
Verdediging Design
</textarea><br>
<input type="submit" value="Upload File" />
</form>
</body>
</html>
文件上载表格
文件上载:
选择要上载的文件:
罗吉斯纳姆:
Stuknr(自动,无需执行):
科斯特:
大会:
${assembly.name}
绿色设计
非常感谢 您的代码行
List fileItems=upload.parseRequest(请求)
甚至else
部分中的所有行都没有任何意义,因为:
List<FileItem> items = new ServletFileUpload(
new DiskFileItemFactory()).parseRequest(request);
附加:检查构造器。检查您使用的表格,必须有“方法”不同!!!!!!是的,但现在他编辑了这篇文章,但他仍然没有告诉我们表单方法。@sunleo,如果它以前有效的话(作为O
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) { //als het een veld is dan dit, anders File uploaden
String fieldname = item.getFieldName();
String fieldvalue = item.getString();
switch (fieldname) {
case "logicalName":
LogicalName = fieldvalue;
break;
//other case statements...
}
} else {
//here you only have to process the file
File file;
int maxFileSize = 500000 * 1024;//your comments...
int maxMemSize = 5000 * 1024;//your comments...
//this must be a constant or a servlet init param, do not hard code it
String filePath = "C:\\uploads\\";
String fileName = FilenameUtils.getName(item.getName());
factory.setSizeThreshold(maxMemSize);
//didn't you have a filePath variable?
factory.setRepository(new File("c:\\temp"));
upload.setSizeMax(maxFileSize);
try {
String fieldName = fi.getFieldName();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
file = new File(filePath, fileName);
item.write(file);
//code to save your file location in db...
//note: this MUST BE in a business logic method, not directly written in your servlet
HttpSession session = request.getSession();
int uploader = (Integer) session.getAttribute("UserId");
} catch (Exception ex) {
//very BAD idea
//use a logger instead like log4j or sfl4j
System.out.println(ex);
}
}
}