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 ...
随机推荐
- 对js的有感而发
1.什么是JavaScript?他是一个脚本语言,也是一种解释性语言,也是一种弱类型语言.2,当我们学习JavaScript时我们肯定要知道,js的组成是什么? 应该怎么用?这些是最基础的.js的组成 ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 8-1
18.6.5 获取数据 PDO的数据获取方法与其他数据库扩展非常类似,只要成功执行SELECT查询,都会有结果集对象生成.不管使用PDO对象中的query()方法,还是使用prepare()和exe ...
- IT兄弟连 HTML5教程 了解HTML5的主流应用3
5 基于HTML5的移动APP开发 不同的操作系统中,需要安装用不同技术开发的APP,移动端的操作系统有很多种,但最主要有两大分支,一种在苹果iOS操作系统中使用Objective-C语言开发APP ...
- 10-Django中间件
中间件 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入和输出. 中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Djang ...
- 【CF1172E】Nauuo and ODT(Link-Cut Tree)
[CF1172E]Nauuo and ODT(Link-Cut Tree) 题面 CF 给你一棵树,每个节点有一个颜色. 定义一条路径的权值为路径上不同颜色的数量.求所有有向路径的权值和. 有\(m\ ...
- Java8的Stream方法findAny空指针异常(NullPointerException)实例对比
实战介绍 学习完Java8的Stream方法,可能你正准备大展身手,却发现遇到不少问题,本篇文章为大家带来一个findAny方法抛出java.lang.NullPointerException的场景. ...
- C#排序案例
using System; namespace 排序案例 { class Program { static void Main(string[] args) { //定义随机数列 int a, b, ...
- 仅支持基本增删改查的学生自制php操作mysql的工具类 DB.class.php (学生笔记)
<?php class DB{ //主机地址 var $host; //用户名 var $username; //密码 var $password; //数据库名 var $dbname; // ...
- leaflet-webpack 入门开发系列一初探篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- 如何突破DNS报文的512字节限制
- DNS的512字节限制 根据协议标准,DNS协议同时占用UDP和TCP的53端口,这是为什么呢? 翻阅DNS资料,可以发现,DNS协议默认按UDP传输,为优化传输性能,DNS协议有一个512字节的 ...