文件上传与文件上传一样重要。在Java中,要实现文件上传,可以有两种方式:

1、通过Servlet类上传

2、通过Struts框架实现上传

这两种方式的根本还是通过Servlet进行IO流的操作。

一、通过Servlet类上传

1、编写Sevlet类

  1. package com.chanshuyi.upload;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7.  
  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12.  
  13. @SuppressWarnings("serial")
  14. public class FileUploadServlet extends HttpServlet {
  15.  
  16. @Override
  17. protected void service(HttpServletRequest request, HttpServletResponse response)
  18. throws ServletException, IOException {
  19.  
  20. InputStream in = request.getInputStream();
  21.  
  22. /* 设置文件保存地址 */
  23. File saveFile = new File(this.getServletContext().getRealPath("/uploaded"), "hello.txt");
  24. System.out.println("[文件保存地址]:" + saveFile.getAbsolutePath());
  25.  
  26. /* 保存 */
  27. FileOutputStream out = new FileOutputStream(saveFile);
  28. byte[] buf = new byte[4096];
  29. int readLength = -1;
  30. while((readLength = in.read(buf)) != -1)
  31. {
  32. out.write(buf);
  33. }
  34. out.flush();
  35. out.close();
  36. in.close();
  37. response.getWriter().write("<html><script>alert('Uploaded Succeed!')</script></html>");
  38. }
  39. }

这里用纯Servlet实现的时候,无法获取文件的文件名以及一些其他信息。还不知道怎么解决(MARK)。

2、配置web.xml文件

添加以下代码:

  1. <!-- 文件上传(通过Servlet实现) -->
  2. <servlet>
  3. <servlet-name>fileUploadServlet</servlet-name>
  4. <servlet-class>com.chanshuyi.upload.FileUploadServlet</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>fileUploadServlet</servlet-name>
  8. <url-pattern>/fileUploadServlet</url-pattern>
  9. </servlet-mapping>

3、前台代码

  1. <p>通过Servlet实现上传</p>
  2. <form action="fileUploadServlet" method="post" enctype="multipart/form-data"><input type="file" name="file" id="file"/><input type="submit" value="提交"/></form>

二、通过Struts框架实现上传

1、配置struts.xml文件

添加如下Action:

  1. <!-- 文件上传(通过Struts实现) -->
  2. <action name="fileUpload" class="com.chanshuyi.upload.FileUploadAction"></action>

2、编写Action类 

  1. package com.chanshuyi.upload;
  2.  
  3. import java.io.File;
  4.  
  5. import javax.servlet.ServletContext;
  6. import javax.servlet.http.HttpServletResponse;
  7.  
  8. import org.apache.commons.io.FileUtils;
  9. import org.apache.struts2.ServletActionContext;
  10.  
  11. import com.opensymphony.xwork2.ActionSupport;
  12.  
  13. @SuppressWarnings("serial")
  14. public class FileUploadAction extends ActionSupport {
  15.  
  16. /** ActionContext对象 **/
  17. ServletContext servletContext = ServletActionContext.getServletContext();
  18.  
  19. HttpServletResponse response = ServletActionContext.getResponse();
  20.  
  21. /* 特定的命名规则,不能改变 */
  22. /** 上传的文件,名字要与前台name属性相同 **/
  23. private File file;
  24.  
  25. /** 上传文件名称 **/
  26. private String fileFileName;
  27.  
  28. /** 上传文件类型 **/
  29. private String fileContentType;
  30.  
  31. public String execute()throws Exception
  32. {
  33. if(file == null)
  34. {
  35. return null;
  36. }
  37. /* 设置文件保存地址 */
  38. File saveFile = new File(servletContext.getRealPath("/uploaded"), fileFileName);
  39. System.out.println("[文件保存地址]:" + saveFile.getAbsolutePath());
  40. if(!saveFile.getParentFile().exists())
  41. {
  42. saveFile.getParentFile().mkdir();
  43. }
  44.  
  45. FileUtils.copyFile(file, saveFile);
  46. System.out.println("[系统消息]:文件已经保存,保存路径为->" + saveFile.getAbsolutePath());
  47.  
  48. response.getWriter().write("<html><script>alert('uploaded Succeed!')</script></html>");
  49.  
  50. return null;
  51. }
  52. /* 省略GET/SET方法 */
  53. }

3、前台页面

  1. <p>通过Struts实现上传</p>
  2. <form action="fileUpload.action" method="post" enctype="multipart/form-data"><input type="file" name="file" id="file"/><input type="submit" value="提交"/></form>

本例写的Action处理后不返回result,直接向response对象写入数据,弹出上传成功的提示。

Java文件上传的几种方式的更多相关文章

  1. curl文件上传有两种方式,一种是post_fileds,一种是infile

    curl文件上传有两种方式,一种是POSTFIELDS,一种是INFILE,POSTFIELDS传递@实际地址,INFILE传递文件流句柄! );curl_setopt($ch, CURLOPT_PO ...

  2. java文件上传-原始的Servlet方式

    前言: 干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的.刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感 ...

  3. web 文件上传的几种方式

    问题 文件上传在WEB开发中应用很广泛. 文件上传是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 以下总结了常见的文件(图片)上传的方式和要点处理. 表单上传 这是传 ...

  4. Servlet中文件上传的几种方式

    上传文件,因为上传的都是二进制数据,所以在Servlet中就不能直接用request.getParameter();方法进行数据的获取,需要借助第三方jar包对上传的二进制文件进行解析.常用的方式如下 ...

  5. 利用Selenium实现图片文件上传的两种方式介绍

    在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同. 一.直接利用Selenium实现 这种方式是最简单的一种实现方式,但是依赖于开发的实现. 当 ...

  6. Python菜鸟之路:Django 文件上传的几种方式

    方式一:通过form表单中,html input 标签的“file”完成 # 前端代码uoload.html <form method="post" action=" ...

  7. ajax以及文件上传的几种方式

    方式一:通过form表单中,html input 标签的“file”完成 # 前端代码uoload.html <form method="post" action=" ...

  8. python文件上传的三种方式

    def upload(request): return render(request, 'upload.html') def upload_file(request): username = requ ...

  9. ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)

    Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uplo ...

随机推荐

  1. 【STM32H7教程】第25章 STM32H7的TCM,SRAM等五块内存基础知识

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第25章       STM32H7的TCM,SRAM等五块内 ...

  2. springboot mail整合freemark实现动态生成模板

    目标:1:springboot 整合 mail2: mail 使用freemark 实现模板动态生成(就是通过字符串生成模板,不需要在工程中写入固定模板)3: springboot 整合aop 实现日 ...

  3. 【文本处理命令】之sed命令详解

    sed行处理命令详解 一.简介 sed命令是一种在线编辑器.一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的,它一次处理一行内容.处理时,把当前处 ...

  4. Alpine Linux 安装 lxml Pillow 失败

    lixm 需要编译安装,因此需要先安装gcc g++ RUN apk add --update --no-cache g++ gcc libxslt-dev python3-dev openssl-d ...

  5. Visual Studio 2019 16.1 使用 .NET Core 3.0

    一.前言 早在很久之前微软便公布 .NET Core 3.0 将支持开发Winform应用程序等等新特性,现如今 .NET Core 3.0 预览版已经出来第五个预览版了,从 .NET Core 2. ...

  6. 调试接口你还在用postman吗

    作者 | 陈凯玲 来源 | my.oschina.net/keking/blog/3104972 接口调试是每个软件开发从业者必不可少的一项技能,一个项目的的完成,可能接口测试调试的时间比真正开发写代 ...

  7. ASP.NET MVC IOC依赖注入之Autofac系列开篇

    Autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 使用IOC,必须面向接口编程,所谓的面向接口编程,即程序中依赖于抽象,而不依赖于具体实现. 需要所有的业务逻辑 ...

  8. python基础(26):类的成员(字段、方法、属性)

    1. 字段 字段:包括普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同. 普通字段属于对象 静态字段属于类 字段的定义和使用: class Province: # ...

  9. centos 7 搭建Samba

    一.Samba简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,由客户端和服务端构成. SMB(Server Message Block的缩写,即服务器消息块)主要是作 ...

  10. python3 FastDFS 配置文件 客户端连接 删除文件 bug

    文件传输使用FastDFS 很方便, 不管是大小文件, 用默认的配置就可以, 这里插入一个配置文件 :  (后补python连接FastDFS上传下载文件) # connect timeout in ...