如何使用JSP / Servlet将file upload到服务器?
我怎样才能使用JSP / Servlet上传文件到服务器? 我试过这个:
<form action="upload" method="post"> <input type="text" name="description" /> <input type="file" name="file" /> <input type="submit" /> </form>
但是,我只获取文件名,而不是文件内容。 当我将enctype="multipart/form-data"
到<form>
, request.getParameter()
返回null
。
在研究期间,我偶然发现了Apache Common FileUpload 。 我试过这个:
FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List items = upload.parseRequest(request); // This line is where it died.
不幸的是,servlet抛出了一个没有明确信息和原因的exception。 这里是堆栈跟踪:
SEVERE: Servlet.service() for servlet UploadServlet threw exception javax.servlet.ServletException: Servlet execution threw an exception at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:637)
介绍
要浏览并select要上传的文件,您需要在表单中<input type="file">
HTML <input type="file">
字段。 如HTML规范所述,您必须使用POST
方法,并且必须将表单的enctype
属性设置为"multipart/form-data"
。
<form action="upload" method="post" enctype="multipart/form-data"> <input type="text" name="description" /> <input type="file" name="file" /> <input type="submit" /> </form>
提交这样的表单之后,二进制多部分表单数据在请求主体中可以以不同于未设置enctype
格式提供 。
在Servlet 3.0之前,Servlet API本身不支持multipart/form-data
。 它仅支持application/x-www-form-urlencoded
的默认表单enctype。 使用多部分表单数据时, request.getParameter()
和consorts都将返回null
。 这是众所周知的Apache Commons FileUpload进入图片的地方。
不要手动parsing它!
理论上你可以基于ServletRequest#getInputStream()
parsing请求体。 但是,这是一个精确而乏味的工作,需要对RFC2388有精确的了解。 你不应该试图自己做这个,或者复制一些在互联网上其他地方find的本地无库代码。 许多在线资源在这方面都失败了,比如roseindia.net。 另见pdf文件的上传 。 你应该使用一个真正的图书馆,这个图书馆已经被数百万用户使用(并且被隐式testing!)了好多年。 这样的图书馆已经certificate了它的坚固性。
当你已经在Servlet 3.0或更高版本上时,使用本机API
如果您至less使用了Servlet 3.0(Tomcat 7,Jetty 9,JBoss AS 6,GlassFish 3等),那么您可以使用标准API提供的HttpServletRequest#getPart()
来收集单独的多部分表单数据项(大多数Servlet 3.0实现实际上使用Apache Commons FileUpload在这个封面!)。 此外,常规的表单字段可以通过getParameter()
通常的方式获得。
首先使用@MultipartConfig
注释您的servlet,以便让它识别并支持multipart/form-data
请求,从而使getPart()
工作:
@WebServlet("/upload") @MultipartConfig public class UploadServlet extends HttpServlet { // ... }
然后,执行它的doPost()
如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String description = request.getParameter("description"); // Retrieves <input type="text" name="description"> Part filePart = request.getPart("file"); // Retrieves <input type="file" name="file"> String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix. InputStream fileContent = filePart.getInputStream(); // ... (do your job here) }
请注意Path#getFileName()
。 这是一个MSIE修复程序,以获取文件的名称。 此浏览器错误地发送完整的文件path而不是只有文件名称的名称。
如果你有一个<input type="file" name="file" multiple="true" />
多file upload,收集如下(不幸的是,没有这样的方法request.getParts("file")
):
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... List<Part> fileParts = request.getParts().stream().filter(part -> "file".equals(part.getName())).collect(Collectors.toList()); // Retrieves <input type="file" name="file" multiple="true"> for (Part filePart : fileParts) { String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix. InputStream fileContent = filePart.getInputStream(); // ... (do your job here) } }
当你不在Servlet 3.1上时,手动获取提交的文件名
请注意, Part#getSubmittedFileName()
是在Servlet 3.1(Tomcat 8,Jetty 9,WildFly 8,GlassFish 4等)中引入的。 如果你还没有使用Servlet 3.1,那么你需要额外的实用程序来获取提交的文件名。
private static String getSubmittedFileName(Part part) { for (String cd : part.getHeader("content-disposition").split(";")) { if (cd.trim().startsWith("filename")) { String fileName = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", ""); return fileName.substring(fileName.lastIndexOf('/') + 1).substring(fileName.lastIndexOf('\\') + 1); // MSIE fix. } } return null; }
String fileName = getSubmittedFileName(filePart);
请注意MSIE修复以获取文件名称。 此浏览器错误地发送完整的文件path而不是只有文件名称的名称。
如果你还没有使用Servlet 3.0,请使用Apache Commons FileUpload
如果你还没有使用Servlet 3.0(是不是要升级?),通常的做法是利用Apache Commons FileUploadparsing多部分表单数据请求。 它有一个很好的用户指南和常见问题 (仔细通过两个)。 还有O'Reilly(“ cos ”) MultipartRequest
,但它有一些(小的)错误,并且不再被主动维护多年。 我不会推荐使用它。 Apache Commons FileUpload仍然积极维护,目前非常成熟。
为了使用Apache Commons FileUpload,您需要在您的/WEB-INF/lib
应用程序的/WEB-INF/lib
中至less包含以下文件:
-
commons-fileupload.jar
-
commons-io.jar
你最初的尝试失败的可能性很大,因为你忘记了公共IO。
下面是一个启动示例,在使用Apache Commons FileUpload时, UploadServlet
的doPost()
方式可能如何:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); for (FileItem item : items) { if (item.isFormField()) { // Process regular form field (input type="text|radio|checkbox|etc", select, etc). String fieldName = item.getFieldName(); String fieldValue = item.getString(); // ... (do your job here) } else { // Process form file field (input type="file"). String fieldName = item.getFieldName(); String fileName = FilenameUtils.getName(item.getName()); InputStream fileContent = item.getInputStream(); // ... (do your job here) } } } catch (FileUploadException e) { throw new ServletException("Cannot parse multipart request.", e); } // ... }
事先getReader()
在同一个请求中调用getParameter()
, getParameterMap()
, getParameterValues()
, getInputStream()
, getReader()
等非常重要。 否则,servlet容器将读取和parsing请求体,因此Apache Commons FileUpload将得到一个空的请求体。 另请参阅ao ServletFileUpload#parseRequest(request)返回一个空列表 。
请注意FilenameUtils#getName()
。 这是一个MSIE修复程序,以获取文件的名称。 此浏览器错误地发送完整的文件path而不是只有文件名称的名称。
另外,你也可以把它全部包装在一个Filter
,这个Filter
自动parsing它,并把这些东西放回到请求的参数映射中,这样你就可以继续使用request.getParameter()
方法,通过request.getAttribute()
。 你可以在这篇博客文章中find一个例子 。
GlassFish3 getParameter()
bug的解决方法仍然返回null
请注意,早于3.1.2的Glassfish版本有一个错误,其中getParameter()
仍然返回null
。 如果您的目标是这样一个容器,并且无法升级它,那么您需要借助此实用程序方法从getPart()
提取值:
private static String getValue(Part part) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(part.getInputStream(), "UTF-8")); StringBuilder value = new StringBuilder(); char[] buffer = new char[1024]; for (int length = 0; (length = reader.read(buffer)) > 0;) { value.append(buffer, 0, length); } return value.toString(); }
String description = getValue(request.getPart("description")); // Retrieves <input type="text" name="description">
保存上传的文件(不要使用getRealPath()
和part.write()
!)
有关将获取的InputStream
( fileContent
variables,如上面的代码片段所示)正确保存到磁盘或数据库的详细信息,请参阅以下答案:
- 将上传的文件保存在servlet应用程序中的推荐方法
- 如何上传图像并将其保存在数据库中?
- 如何将零件转换为Blob,所以我可以将其存储在MySQL?
提供上传的文件
请转到以下答案,了解如何正确地将保存的文件从磁盘或数据库提供回客户端:
- 使用<h:graphicImage>或<img>标签从webapps / webcontext / deploy文件夹外部加载图像
- 如何从JSP页面中的数据库中检索和显示图像?
- 在Java Web应用程序中从应用程序服务器外部提供静态数据的最简单方法
- 支持HTTPcaching的静态资源servlet的抽象模板
Ajax化表单
请教如何使用Ajax(和jQuery)上传以下答案。 请注意,收集表单数据的servlet代码不需要为此更改! 只有你的回应方式可能会改变,但这是相当微不足道的(而不是转发到JSP,只是打印一些JSON或XML甚至纯文本取决于负责Ajax调用的脚本所期望的)。
- 如何使用JSP / Servlet和Ajax将file upload到服务器?
- 通过xmlHttpRequest发送一个文件为multipart
- HTML5file upload到Java Servlet
希望这一切帮助:)
如果你碰巧使用了Spring MVC,那么这就是:(如果有人觉得它有用的话,我就把它留在这里)。
使用enctype
属性设置为“ multipart/form-data
”的multipart/form-data
(与BalusC的答案相同)
<form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="Upload"/> </form>
在您的控制器中,将请求参数file
映射到MultipartFile
types,如下所示:
@RequestMapping(value = "/upload", method = RequestMethod.POST) public void handleUpload(@RequestParam("file") MultipartFile file) throws IOException { if (!file.isEmpty()) { byte[] bytes = file.getBytes(); // alternatively, file.getInputStream(); // application logic } }
您可以使用MultipartFile
的getOriginalFilename()
和getSize()
来获取文件名和大小。
我已经用Spring 4.1.1.RELEASE
testing过了。
您需要将common-io.1.4.jar
文件包含在lib
目录中,或者如果您使用的是NetBeans等编辑器,则需要转到项目属性,然后添加JAR文件,您将完成。
要获取common.io.jar
文件,只需要将其放到Google上,或者直接进入Apache Tomcat网站,在那里您可以免费下载该文件。 但请记住一件事:如果您是Windows用户,请下载二进制ZIP文件。
我为每个 Html表单使用通用的Servlet,不pipe它是否有附件。 这个Servlet返回一个TreeMap
,其中的键是jsp名称参数和值是用户input并将所有附件保存在固定目录中,稍后重命名您所select的目录。这里的连接是我们的具有连接对象的自定义接口。 我认为这会帮助你
public class ServletCommonfunctions extends HttpServlet implements Connections { private static final long serialVersionUID = 1L; public ServletCommonfunctions() {} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {} public SortedMap<String, String> savefilesindirectory( HttpServletRequest request, HttpServletResponse response) throws IOException { // Map<String, String> key_values = Collections.synchronizedMap( new // TreeMap<String, String>()); SortedMap<String, String> key_values = new TreeMap<String, String>(); String dist = null, fact = null; PrintWriter out = response.getWriter(); File file; String filePath = "E:\\FSPATH1\\2KL06CS048\\"; System.out.println("Directory Created ????????????" + new File(filePath).mkdir()); int maxFileSize = 5000 * 1024; int maxMemSize = 5000 * 1024; // Verify the content type String contentType = request.getContentType(); if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(maxMemSize); // Location to save data that is larger than maxMemSize. factory.setRepository(new File(filePath)); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // maximum file size to be uploaded. upload.setSizeMax(maxFileSize); try { // Parse the request to get file items. @SuppressWarnings("unchecked") List<FileItem> fileItems = upload.parseRequest(request); // Process the uploaded file items Iterator<FileItem> i = fileItems.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); if (!fi.isFormField()) { // Get the uploaded file parameters String fileName = fi.getName(); // Write the file 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); } else { key_values.put(fi.getFieldName(), fi.getString()); } } } catch (Exception ex) { System.out.println(ex); } } return key_values; } }
没有组件或外部库在Tomcat 6 o 7
在web.xml文件中启用上载:
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <multipart-config> <max-file-size>3145728</max-file-size> <max-request-size>5242880</max-request-size> </multipart-config> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet>
你可以看到 :
<multipart-config> <max-file-size>3145728</max-file-size> <max-request-size>5242880</max-request-size> </multipart-config>
使用JSP上传文件。 文件:
在html文件中
<form method="post" enctype="multipart/form-data" name="Form" > <input type="file" name="fFoto" id="fFoto" value="" /></td> <input type="file" name="fResumen" id="fResumen" value=""/>
在JSP文件或Servlet中
InputStream isFoto = request.getPart("fFoto").getInputStream(); InputStream isResu = request.getPart("fResumen").getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte buf[] = new byte[8192]; int qt = 0; while ((qt = isResu.read(buf)) != -1) { baos.write(buf, 0, qt); } String sResumen = baos.toString();
编辑你的代码到servlet的要求,如最大文件大小 , 最大请求大小和其他选项,你可以设置…
如果您使用带有embedded式Tomcat的Geronimo,则会出现此问题的另一个来源。 在这种情况下,在testingcommons-io和commons-fileupload的许多迭代之后,问题出现在处理commons-xxx jar的父类加载器中。 这是必须防止的。 事故总是发生在:
fileItems = uploader.parseRequest(request);
请注意,fileItems的Listtypes已经随commons-fileupload的当前版本而变化,具体来说是List<FileItem>
,而不是之前版本中的genericsList
。
我将commons-fileupload和commons-io的源代码添加到了我的Eclipse项目中,以追踪实际的错误并最终得到了一些见解。 首先,抛出的exception是Throwabletypes,而不是FileIOException,甚至Exception(这些都不会被捕获)。 其次,错误信息是混淆的,因为它没有find类,因为axis2找不到commons-io。 我的项目中完全没有使用Axis2,但作为标准安装的一部分,它作为Geronimo存储库子目录中的一个文件夹存在。
最后,我find了一个能够解决我的问题的解决scheme。 您必须在部署计划中隐藏父装载器中的jar子。 这是我的完整文件放在geronimo-web.xml中,如下所示。
Pasted from <http://osdir.com/ml/user-geronimo-apache/2011-03/msg00026.html> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <web:web-app xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0" xmlns:client="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0" xmlns:conn="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2" xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2" xmlns:ejb="http://openejb.apache.org/xml/ns/openejb-jar-2.2" xmlns:log="http://geronimo.apache.org/xml/ns/loginconfig-2.0" xmlns:name="http://geronimo.apache.org/xml/ns/naming-1.2" xmlns:pers="http://java.sun.com/xml/ns/persistence" xmlns:pkgen="http://openejb.apache.org/xml/ns/pkgen-2.1" xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0" xmlns:web="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1"> <dep:environment> <dep:moduleId> <dep:groupId>DataStar</dep:groupId> <dep:artifactId>DataStar</dep:artifactId> <dep:version>1.0</dep:version> <dep:type>car</dep:type> </dep:moduleId> <!--Don't load commons-io or fileupload from parent classloaders--> <dep:hidden-classes> <dep:filter>org.apache.commons.io</dep:filter> <dep:filter>org.apache.commons.fileupload</dep:filter> </dep:hidden-classes> <dep:inverse-classloading/> </dep:environment> <web:context-root>/DataStar</web:context-root> </web:web-app>
对于Spring MVC,我一直在尝试几个小时来做到这一点,并设法有一个简单的版本,工作的表单input数据和图像。
<form action="/handleform" method="post" enctype="multipart/form-data"> <input type="text" name="name" /> <input type="text" name="age" /> <input type="file" name="file" /> <input type="submit" /> </form>
控制器来处理
@Controller public class FormController { @RequestMapping(value="/handleform",method= RequestMethod.POST) ModelAndView register(@RequestParam String name, @RequestParam int age, @RequestParam MultipartFile file) throws ServletException, IOException { System.out.println(name); System.out.println(age); if(!file.isEmpty()){ byte[] bytes = file.getBytes(); String filename = file.getOriginalFilename(); BufferedOutputStream stream =new BufferedOutputStream(new FileOutputStream(new File("D:/" + filename))); stream.write(bytes); stream.flush(); stream.close(); } return new ModelAndView("index"); } }
希望它有助于:)
下面是一个使用apache commons-fileupload的例子:
// apache commons-fileupload to handle file upload DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File(DataSources.TORRENTS_DIR())); ServletFileUpload fileUpload = new ServletFileUpload(factory); List<FileItem> items = fileUpload.parseRequest(req.raw()); FileItem item = items.stream() .filter(e -> "the_upload_name".equals(e.getFieldName())) .findFirst().get(); String fileName = item.getName(); item.write(new File(dir, fileName)); log.info(fileName);
你可以使用jsp / servlet上传文件。
<form action="UploadFileServlet" method="post"> <input type="text" name="description" /> <input type="file" name="file" /> <input type="submit" /> </form>
另一方面服务器端。 使用下面的代码。
package com.abc..servlet; import java.io.File; --------- -------- /** * Servlet implementation class UploadFileServlet */ public class UploadFileServlet extends HttpServlet { private static final long serialVersionUID = 1L; public UploadFileServlet() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.sendRedirect("../jsp/ErrorPage.jsp"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub PrintWriter out = response.getWriter(); HttpSession httpSession = request.getSession(); String filePathUpload = (String) httpSession.getAttribute("path")!=null ? httpSession.getAttribute("path").toString() : "" ; String path1 = filePathUpload; String filename = null; File path = null; FileItem item=null; boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); String FieldName = ""; try { List items = upload.parseRequest(request); Iterator iterator = items.iterator(); while (iterator.hasNext()) { item = (FileItem) iterator.next(); if (fieldname.equals("description")) { description = item.getString(); } } if (!item.isFormField()) { filename = item.getName(); path = new File(path1 + File.separator); if (!path.exists()) { boolean status = path.mkdirs(); } /* START OF CODE FRO PRIVILEDGE*/ File uploadedFile = new File(path + Filename); // for copy file item.write(uploadedFile); } } else { f1 = item.getName(); } } // END OF WHILE response.sendRedirect("welcome.jsp"); } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } }
DiskFileUpload upload=new DiskFileUpload();
从这个对象,你必须得到文件项目和领域,然后你可以存储到服务器像跟着
String loc="./webapps/prjct name/server folder/"+contentid+extension; File uploadFile=new File(loc); item.write(uploadFile);
发送多个文件的文件,我们必须使用enctype="multipart/form-data"
并在input标签中发送多个文件使用multiple="multiple"
<form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="fileattachments" multiple="multiple"/> <input type="submit" /> </form>
HTML页面
<html> <head> <title>File Uploading Form</title> </head> <body> <h3>File Upload:</h3> Select a file to upload: <br /> <form action="UploadServlet" method="post" enctype="multipart/form-data"> <input type="file" name="file" size="50" /> <br /> <input type="submit" value="Upload File" /> </form> </body> </html>
SERVLET文件
// Import required java libraries import java.io.*; import java.util.*; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.output.*; public class UploadServlet extends HttpServlet { private boolean isMultipart; private String filePath; private int maxFileSize = 50 * 1024; private int maxMemSize = 4 * 1024; private File file ; public void init( ){ // Get the file location where it would be stored. filePath = getServletContext().getInitParameter("file-upload"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { // Check that we have a file upload request isMultipart = ServletFileUpload.isMultipartContent(request); response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter( ); if( !isMultipart ){ out.println("<html>"); out.println("<head>"); out.println("<title>Servlet upload</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>No file uploaded</p>"); out.println("</body>"); out.println("</html>"); return; } DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(maxMemSize); // Location to save data that is larger than maxMemSize. factory.setRepository(new File("c:\\temp")); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // maximum file size to be uploaded. upload.setSizeMax( maxFileSize ); try{ // Parse the request to get file items. List fileItems = upload.parseRequest(request); // Process the uploaded file items Iterator i = fileItems.iterator(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet upload</title>"); out.println("</head>"); out.println("<body>"); while ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { // Get the uploaded file parameters String fieldName = fi.getFieldName(); String fileName = fi.getName(); String contentType = fi.getContentType(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); // Write the file 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 ) ; out.println("Uploaded Filename: " + fileName + "<br>"); } } out.println("</body>"); out.println("</html>"); }catch(Exception ex) { System.out.println(ex); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { throw new ServletException("GET method used with " + getClass( ).getName( )+": POST method required."); } }
web.xml中
编译上面的servlet UploadServlet并在web.xml文件中创build所需的条目,如下所示。
<servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/UploadServlet</url-pattern> </servlet-mapping>