java web接收上传文件服务器端示例
资源文件列表:

UploadTest\.classpath 335B
UploadTest\.project 318B
UploadTest\.settings\.jsdtscope 236B
UploadTest\.settings\org.eclipse.jdt.core.prefs 156B
UploadTest\.settings\org.eclipse.wst.common.component 263B
UploadTest\.settings\org.eclipse.wst.common.project.facet.core.xml 178B
UploadTest\.settings\org.eclipse.wst.jsdt.ui.superType.container 49B
UploadTest\.settings\org.eclipse.wst.jsdt.ui.superType.name 6B
UploadTest\build\classes\MyUploadServlet.class 2.37KB
UploadTest\src\MyUploadServlet.java 1.35KB
UploadTest\WebContent\index.jsp 322B
UploadTest\WebContent\META-INF\MANIFEST.MF 39B
UploadTest\WebContent\WEB-INF\lib\commons-fileupload-1.3.1.jar 58.17KB
UploadTest\WebContent\WEB-INF\lib\commons-io-2.4.jar 164.63KB
UploadTest\WebContent\WEB-INF\web.xml 342B
UploadTest\WebContent\WEB-INF\lib
UploadTest\build\classes
UploadTest\WebContent\META-INF
UploadTest\WebContent\WEB-INF
UploadTest\.settings
UploadTest\build
UploadTest\src
UploadTest\WebContent
UploadTest
资源介绍:
在Java Web开发中,文件上传是一项常见的功能,特别是在Android客户端与服务器进行交互时。本示例项目主要关注如何在服务器端使用Java Servlet接收Android客户端上传的文件。在处理上传文件时,我们通常需要关注以下几个核心知识点: 1. **HTTP协议与Multipart请求**:在Android客户端上传文件时,通常会通过HTTP的POST请求来实现,其中文件数据以Multipart/form-data格式封装。Multipart是一种用于在单一HTTP请求中传输多种类型数据的格式,是上传文件的标准方式。 2. **Servlet生命周期与service方法**:Java Servlet是运行在服务器端的Java程序,它有三个基本方法:init、service和destroy。当接收到请求时,Servlet容器调用service方法,该方法会根据请求类型(GET、POST等)选择适当的方法处理请求。 3. **HttpServletRequest对象**:在Servlet的service方法中,可以通过HttpServletRequest对象获取请求参数。对于Multipart请求,HttpServletRequest对象提供了API来解析请求中的文件数据。 4. **Commons FileUpload库**:在Java中,处理Multipart请求通常需要第三方库,如Apache的Commons FileUpload。这个库可以帮助我们解析请求并提取上传的文件。需要在项目中引入这个库的依赖。 5. **处理文件上传**:在Servlet中,我们需要创建一个DiskFileItemFactory实例,然后使用ServletFileUpload构造器初始化一个FileUpload对象。通过parseRequest方法解析HttpServletRequest,得到一个FileItemIterator,遍历这个迭代器,就可以访问每个上传的文件或表单字段。 6. **文件编码问题**:在描述中提到,参数传递时中文可能会乱码,但文件不会。这是因为在HTTP请求中,URL编码和表单数据编码不同。文件内容通常不涉及字符编码,而表单数据(包括文件名)可能需要正确设置字符集。在解析FileItem时,可以设置字符集,例如`fileItem.getString("utf-8")`。 7. **文件存储**:接收到上传的文件后,你需要将其存储到服务器的某个位置。这通常涉及到路径管理、文件命名、错误处理和安全性等问题。例如,你可以选择在指定的临时目录或指定的文件夹下保存文件,并确保文件名的唯一性。 8. **响应处理**:服务器接收到文件后,应向Android客户端发送一个响应,告知文件上传是否成功。可以设置HttpServletResponse的状态码和响应消息,例如返回200表示成功,其他状态码表示失败原因。 9. **安全与性能优化**:在实际应用中,还需要考虑文件大小限制、防止重复上传、病毒扫描等安全措施。同时,优化文件读写性能,如使用异步处理、流式操作等技术。 以上就是Java Web接收上传文件服务器端示例的主要技术点。在UploadTest项目中,你将看到如何实现这些步骤的代码,从而完成Android客户端与服务器之间的文件上传交互。No file uploaded
"); out.println(""); out.println(""); 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:\\apache-tomcat-8.0.9\\webapps\\data\\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(""); out.println(""); out.println(""); }else{ String fieldName=fi.getFieldName(); if(fieldName.equals("user")){ String user=fi.getString(); out.println(fieldName+":" + user + "
"); targetPath=filePath+user+"\\"; } } } out.println(""); out.println(""); }catch(Exception ex) { System.out.println(ex); } } }