Java文件上传的几种方式
文件上传与文件上传一样重要。在Java中,要实现文件上传,可以有两种方式:
1、通过Servlet类上传
2、通过Struts框架实现上传
这两种方式的根本还是通过Servlet进行IO流的操作。
一、通过Servlet类上传
1、编写Sevlet类
- package com.chanshuyi.upload;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @SuppressWarnings("serial")
- public class FileUploadServlet extends HttpServlet {
- @Override
- protected void service(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- InputStream in = request.getInputStream();
- /* 设置文件保存地址 */
- File saveFile = new File(this.getServletContext().getRealPath("/uploaded"), "hello.txt");
- System.out.println("[文件保存地址]:" + saveFile.getAbsolutePath());
- /* 保存 */
- FileOutputStream out = new FileOutputStream(saveFile);
- byte[] buf = new byte[4096];
- int readLength = -1;
- while((readLength = in.read(buf)) != -1)
- {
- out.write(buf);
- }
- out.flush();
- out.close();
- in.close();
- response.getWriter().write("<html><script>alert('Uploaded Succeed!')</script></html>");
- }
- }
这里用纯Servlet实现的时候,无法获取文件的文件名以及一些其他信息。还不知道怎么解决(MARK)。
2、配置web.xml文件
添加以下代码:
- <!-- 文件上传(通过Servlet实现) -->
- <servlet>
- <servlet-name>fileUploadServlet</servlet-name>
- <servlet-class>com.chanshuyi.upload.FileUploadServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>fileUploadServlet</servlet-name>
- <url-pattern>/fileUploadServlet</url-pattern>
- </servlet-mapping>
3、前台代码
- <p>通过Servlet实现上传</p>
- <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:
- <!-- 文件上传(通过Struts实现) -->
- <action name="fileUpload" class="com.chanshuyi.upload.FileUploadAction"></action>
2、编写Action类
- package com.chanshuyi.upload;
- import java.io.File;
- import javax.servlet.ServletContext;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.io.FileUtils;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- @SuppressWarnings("serial")
- public class FileUploadAction extends ActionSupport {
- /** ActionContext对象 **/
- ServletContext servletContext = ServletActionContext.getServletContext();
- HttpServletResponse response = ServletActionContext.getResponse();
- /* 特定的命名规则,不能改变 */
- /** 上传的文件,名字要与前台name属性相同 **/
- private File file;
- /** 上传文件名称 **/
- private String fileFileName;
- /** 上传文件类型 **/
- private String fileContentType;
- public String execute()throws Exception
- {
- if(file == null)
- {
- return null;
- }
- /* 设置文件保存地址 */
- File saveFile = new File(servletContext.getRealPath("/uploaded"), fileFileName);
- System.out.println("[文件保存地址]:" + saveFile.getAbsolutePath());
- if(!saveFile.getParentFile().exists())
- {
- saveFile.getParentFile().mkdir();
- }
- FileUtils.copyFile(file, saveFile);
- System.out.println("[系统消息]:文件已经保存,保存路径为->" + saveFile.getAbsolutePath());
- response.getWriter().write("<html><script>alert('uploaded Succeed!')</script></html>");
- return null;
- }
- /* 省略GET/SET方法 */
- }
3、前台页面
- <p>通过Struts实现上传</p>
- <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文件上传的几种方式的更多相关文章
- curl文件上传有两种方式,一种是post_fileds,一种是infile
curl文件上传有两种方式,一种是POSTFIELDS,一种是INFILE,POSTFIELDS传递@实际地址,INFILE传递文件流句柄! );curl_setopt($ch, CURLOPT_PO ...
- java文件上传-原始的Servlet方式
前言: 干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的.刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感 ...
- web 文件上传的几种方式
问题 文件上传在WEB开发中应用很广泛. 文件上传是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 以下总结了常见的文件(图片)上传的方式和要点处理. 表单上传 这是传 ...
- Servlet中文件上传的几种方式
上传文件,因为上传的都是二进制数据,所以在Servlet中就不能直接用request.getParameter();方法进行数据的获取,需要借助第三方jar包对上传的二进制文件进行解析.常用的方式如下 ...
- 利用Selenium实现图片文件上传的两种方式介绍
在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同. 一.直接利用Selenium实现 这种方式是最简单的一种实现方式,但是依赖于开发的实现. 当 ...
- Python菜鸟之路:Django 文件上传的几种方式
方式一:通过form表单中,html input 标签的“file”完成 # 前端代码uoload.html <form method="post" action=" ...
- ajax以及文件上传的几种方式
方式一:通过form表单中,html input 标签的“file”完成 # 前端代码uoload.html <form method="post" action=" ...
- python文件上传的三种方式
def upload(request): return render(request, 'upload.html') def upload_file(request): username = requ ...
- ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)
Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uplo ...
随机推荐
- 【STM32H7教程】第25章 STM32H7的TCM,SRAM等五块内存基础知识
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第25章 STM32H7的TCM,SRAM等五块内 ...
- springboot mail整合freemark实现动态生成模板
目标:1:springboot 整合 mail2: mail 使用freemark 实现模板动态生成(就是通过字符串生成模板,不需要在工程中写入固定模板)3: springboot 整合aop 实现日 ...
- 【文本处理命令】之sed命令详解
sed行处理命令详解 一.简介 sed命令是一种在线编辑器.一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的,它一次处理一行内容.处理时,把当前处 ...
- Alpine Linux 安装 lxml Pillow 失败
lixm 需要编译安装,因此需要先安装gcc g++ RUN apk add --update --no-cache g++ gcc libxslt-dev python3-dev openssl-d ...
- Visual Studio 2019 16.1 使用 .NET Core 3.0
一.前言 早在很久之前微软便公布 .NET Core 3.0 将支持开发Winform应用程序等等新特性,现如今 .NET Core 3.0 预览版已经出来第五个预览版了,从 .NET Core 2. ...
- 调试接口你还在用postman吗
作者 | 陈凯玲 来源 | my.oschina.net/keking/blog/3104972 接口调试是每个软件开发从业者必不可少的一项技能,一个项目的的完成,可能接口测试调试的时间比真正开发写代 ...
- ASP.NET MVC IOC依赖注入之Autofac系列开篇
Autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 使用IOC,必须面向接口编程,所谓的面向接口编程,即程序中依赖于抽象,而不依赖于具体实现. 需要所有的业务逻辑 ...
- python基础(26):类的成员(字段、方法、属性)
1. 字段 字段:包括普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同. 普通字段属于对象 静态字段属于类 字段的定义和使用: class Province: # ...
- centos 7 搭建Samba
一.Samba简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,由客户端和服务端构成. SMB(Server Message Block的缩写,即服务器消息块)主要是作 ...
- python3 FastDFS 配置文件 客户端连接 删除文件 bug
文件传输使用FastDFS 很方便, 不管是大小文件, 用默认的配置就可以, 这里插入一个配置文件 : (后补python连接FastDFS上传下载文件) # connect timeout in ...