Java 如何将图像名称和另一个输入字段值同时从表单中提取到servlet中

Java 如何将图像名称和另一个输入字段值同时从表单中提取到servlet中,java,javascript,mysql,jsp,servlets,Java,Javascript,Mysql,Jsp,Servlets,我正在使用jsp和servlet上传一个图像。我使用的是enctype=multipart/formdata。但我无法将输入字段值提取到servlet中 这是我的jsp代码 <form method="post" action="uploadImage" enctype="multipart/form-data"> <p>Select file to upload:</p> <input type="file" name=

我正在使用jsp和servlet上传一个图像。我使用的是enctype=multipart/formdata。但我无法将输入字段值提取到servlet中

这是我的jsp代码

<form method="post" action="uploadImage" enctype="multipart/form-data">
        <p>Select file to upload:</p>
        <input type="file" name="file" >
        <input type="text" name="name" >
        <br><br>
        <input type="submit" value="Upload" >
    </form>
这是我的sevlet代码

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
           response.setContentType("text/html;charset=UTF-8");
    HttpSession sess=request.getSession();
    PrintWriter out = response.getWriter();
int i=0;
    String u_id=(String) sess.getAttribute("uid");
    String saveFile="";
String contentType = request.getContentType();
if((contentType != null)&&(contentType.indexOf("multipart/form-data") >= 0)){
DataInputStream in = new DataInputStream(request.getInputStream());
int formDataLength = request.getContentLength();
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
while(totalBytesRead < formDataLength){
byteRead = in.read(dataBytes, totalBytesRead,formDataLength);
totalBytesRead += byteRead;
}

saveFile = file.substring(file.indexOf("filename=\"") + 10);
saveFile = saveFile.substring(0, saveFile.indexOf("\n"));

saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));

String boundary = contentType.substring(lastIndex + 1,contentType.length());
int pos;
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
int boundaryLocation = file.indexOf(boundary, pos) - 4;
int startPos = ((file.substring(0, pos)).getBytes()).length;

File ff = new File("D:/images/"+saveFile);
FileOutputStream fileOut = new FileOutputStream(ff);
fileOut.write(dataBytes, startPos, (endPos - startPos));
fileOut.flush();
fileOut.close();
try{
Connection con;
PreparedStatement ps,ps1;
ResultSet rs;
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dfmc","root","93Pb3gaNv0");
String sql="insert into profilepic_table(uid, image_name) values('"+u_id+"','"+ff.getName()+"')";
ps=con.prepareStatement(sql);
ps.executeUpdate();
}
}catch(Exception e){
e.printStackTrace();
}
}

我还想选择多个文件并上传它们。

在定义Servlet之前添加以下代码行,要处理多部分/表单数据提交,必须使用多部分注释

@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB
    maxFileSize = 1024 * 1024 * 10, // 10MB
    maxRequestSize = 1024 * 1024 * 50)

public class ServletName extends HttpServlet { ... }

另外,导入javax.servlet.annotation.MultipartConfig

不行,兄弟…错误!java.lang.RuntimeException:不可编译的源代码-添加@WebServlet/ServletName并导入javax.servlet.annotation.WebServlet后找不到symbol-symbol:class MultipartConfigTry;在此之后,此错误将显示…java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1 java.lang.String.substringString.java:1954 uploadImage2.processRequestuploadImage2.java:86 uploadImage2.doPostuploadImage2.java:255javax.servlet.http.HttpServlet.serviceHttpServlet.java:644 javax.servlet.http.HttpServlet.serviceHttpServlet.java:725 org.apache.tomcat.websocket.server.WsFilter.dofilterSfilter.java:52 org.netbeans.modules.web.monitor.server.MonitorFilter.doFilterMonitorFilter.java:393Debug您的代码和检查变量文件是否有一些值。抛出错误的是两行中的任何一行。saveFile=file.substringfile.indexOfficeName=\+10;saveFile=saveFile.substring0,saveFile.indexOf\n;saveFile=saveFile.substringsaveFile.lastIndexOf\\+1,saveFile.indexOf\;请将roseindia.net添加到您的互联网黑名单中。永远不要用那一面。这只会让你陷入糟糕代码和糟糕实践的恶性循环。