首页下载资源服务器应用java web接收上传文件服务器端示例

RARjava web接收上传文件服务器端示例

loveliwenyan2012230.45KB需要积分:1

资源文件列表:

UploadTest.rar 大约有24个文件
  1. UploadTest\.classpath 335B
  2. UploadTest\.project 318B
  3. UploadTest\.settings\.jsdtscope 236B
  4. UploadTest\.settings\org.eclipse.jdt.core.prefs 156B
  5. UploadTest\.settings\org.eclipse.wst.common.component 263B
  6. UploadTest\.settings\org.eclipse.wst.common.project.facet.core.xml 178B
  7. UploadTest\.settings\org.eclipse.wst.jsdt.ui.superType.container 49B
  8. UploadTest\.settings\org.eclipse.wst.jsdt.ui.superType.name 6B
  9. UploadTest\build\classes\MyUploadServlet.class 2.37KB
  10. UploadTest\src\MyUploadServlet.java 1.35KB
  11. UploadTest\WebContent\index.jsp 322B
  12. UploadTest\WebContent\META-INF\MANIFEST.MF 39B
  13. UploadTest\WebContent\WEB-INF\lib\commons-fileupload-1.3.1.jar 58.17KB
  14. UploadTest\WebContent\WEB-INF\lib\commons-io-2.4.jar 164.63KB
  15. UploadTest\WebContent\WEB-INF\web.xml 342B
  16. UploadTest\WebContent\WEB-INF\lib
  17. UploadTest\build\classes
  18. UploadTest\WebContent\META-INF
  19. UploadTest\WebContent\WEB-INF
  20. UploadTest\.settings
  21. UploadTest\build
  22. UploadTest\src
  23. UploadTest\WebContent
  24. 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客户端与服务器之间的文件上传交互。
import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class MyUploadServlet */ @WebServlet("/MyUploadServlet") public class MyUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private boolean isMultipart; private String filePath; private int maxFileSize = 50 * 1024; private int maxMemSize = 10 * 1024; private File file ; private String targetPath; /** * @see Servlet#init(ServletConfig) */ public void init(ServletConfig config) throws ServletException { filePath = "C:\\apache-tomcat-8.0.9\\webapps\\data\\"; } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().print("getMethod:welcome!!!"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { isMultipart = ServletFileUpload.isMultipartContent(request); response.setContentType("text/html;charset=gb2312"); // response.setCharacterEncoding("utf-8"); java.io.PrintWriter out = response.getWriter( ); if( !isMultipart ){ out.println(""); out.println(""); out.println("Servlet upload"); out.println(""); out.println(""); out.println("

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("Servlet upload"); out.println(""); out.println(""); 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( targetPath + fileName.substring( fileName.lastIndexOf("\\"))) ; }else{ file = new File( targetPath + fileName.substring(fileName.lastIndexOf("\\")+1)) ; } fi.write( file ) ; out.println("Uploaded Filename: " + fileName + "
"); }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); } } }
100+评论
captcha