day24(JAVAWEB上传与下载)
javaWeb上传与下载
上传:
上传方式:
jspSmartUpload :应用在jsp上的文件上传与下载组件。
FileUpload :用用在jaava环境上的上传的功能
Servlet3.0 :提供了文件上传功能
Struts2 :提供文件上传的功能
这里主要讲述FileUpload上传和下载
上传三要素:
1.提交的方式必须是post(因为get提交的内容大小是有限制的)
2.表单中需要有<input type=”file”>元素,需要有name属性和值。
3.表单enctype=”multipart/form-data”。
测试页面:
<form action="提交地址" method="post" enctype="multipart/form-data">
<input type="text" name="info"/></br>
<input type="file" name="filename"/>
<input type="submit" value="上传"/>
</form>
使用servlet来接收上传过来的文件项
1.导包
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
2.编写servlet来接收
package com.baidu.upload; import java.io.File;
import java.io.IOException;
import java.util.List; import javax.servlet.ServletException;
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; public class FileUploadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//获取磁盘工厂
DiskFileItemFactory dfif=new DiskFileItemFactory();
//获取核心类
ServletFileUpload sfu=new ServletFileUpload(dfif);
//对核心类对象进行编码, 解决了文件名字中的乱码
sfu.setHeaderEncoding("UTF-8");
//获取提交参数集合(每一个表单项FileItem)
List<FileItem> list = sfu.parseRequest(request);
for (FileItem fileItem : list) {
//判断是否是普通项
if (fileItem.isFormField()) {
//普通项
String name = fileItem.getName();
String value = fileItem.getString("UTF-8");
System.out.println(name+" "+value);
} else {
//文件项
//获取文件的名字
String fieldName = fileItem.getName();
//设置服务器存储路径
String dir="C:\\Users\\Administrator\\Desktop\\develop";
//使用文件项流进行流的对接
fileItem.write(new File(dir,fieldName));
fileItem.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
文件的下载
下载的方式:自动下载和手动下载
自动下载:使用超链接的方式实现文件的下载
在<a href=”文件的路径”>超链接</a>
注意:超链接的方式,如果浏览器不能识别这种格式的文件,提示下载,如果支持该格式的文件,直接打开。
手动下载:设置两头一流
Context-Type :文件类型MIME。
Context-Disposition :浏览器支持该格式文件下载,提示下载。
输出流 :设置代表该文件的输入流(输出流是固定 response.getOutputStream())
package com.baidu.controller; import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder; import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.baidu.utils.DownloadUtils; public class FileDownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收参数
String filePath = request.getParameter("path");
//对接收来的数据进行重新编码
String fileName = new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8");
String file=filePath+"\\"+fileName;
//设置两头一流Content-type Content-disposition 文件输出流
String type = getServletContext().getMimeType(file);
//设置响应头部的类型
response.setContentType(type);
response.setHeader("Content-Disposition", "attachment;filename="+file); //获取浏览器的类型
//String header = request.getHeader("User-Agent");
//if ("Firefox".equalsIgnoreCase(header)) {
//file = DownloadUtils.base64EncodeFileName(file);
//} else {
//file = URLEncoder.encode(file,"UTF-8");
//}
//获取输入流对象 把要下载的文件作为输入流对象参数
InputStream ips=new FileInputStream(file);
//获取响应输出流对象 响应为页面
ServletOutputStream outputStream = response.getOutputStream();
int len=0;
byte[] bt=new byte[1024*1024*3];
while((len=ips.read(bt))!=-1){
outputStream.write(bt, 0, len);
}
ips.close();
outputStream.close();
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }
使用Struts2文件上传
private File file; //对应前台的file的name属性
private String fileContentType; //对应File+ContextType
private String fileFileName; //对应File+FileName;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String execute(){
try {
FileUtils.copyFile(file, new File("E:/server",fileFileName));
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
配置文件
<action name="upload" class="com.baidu.web.action.UploadAction" method="execute">
<result name="success">/success.jsp</result>
<!-- 配置上传文件监听器 -->
<interceptor-ref name="fileUpload">
<!-- 配置上传文件的大小 -->
<param name="maximumSize"></param>
<!-- 上传文件扩展名 -->
<param name="allowedExtensions">bmp,txt,xml,doc,java</param> <!-- 设置上传文件允许的后缀名,多个使用逗号分开 -->
<!-- 配置上传文件的类型 -->
<param name="allowedTypesSet">application/java</param> </interceptor-ref>
<interceptor-ref name="defaultStack"/>
</action>
多文件上传
private File[] file; //对应前台的file的name属性
private String[] fileContentType; //对应File+ContextType
private String[] fileFileName; //对应File+FileName; public File[] getFile() {
return file;
} public void setFile(File[] file) {
this.file = file;
} public String[] getFileContentType() {
return fileContentType;
} public void setFileContentType(String[] fileContentType) {
this.fileContentType = fileContentType;
} public String[] getFileFileName() {
return fileFileName;
} public void setFileFileName(String[] fileFileName) {
this.fileFileName = fileFileName;
} public String execute(){
try {
for (File f : file) {
}
for (int i = 0; i < file.length; i++) {
FileUtils.copyFile(file[i], new File("E:/server",fileFileName[i]));
}
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
day24(JAVAWEB上传与下载)的更多相关文章
- (转载)JavaWeb学习总结(五十)——文件上传和下载
源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...
- JavaWeb学习总结,文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- JavaWeb学习总结(五十)——文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- JavaWeb——文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- JavaWeb学习 (二十八)————文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- JavaWeb学习总结——文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- 【Java】JavaWeb文件上传和下载
文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...
- JavaWeb文件上传和下载
文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...
- javaWeb中,文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
随机推荐
- Jmeter常用脚本开发之JDBC请求
简单说明:JDBC请求就是使用Jmeter连接数据库,执行sql语句,并返回对应的响应结果 步骤: 1.引入使用的数据库的驱动jar包,使用不同的数据库,我们需要引入不同的jar包.本文使用的MySQ ...
- Iperf使用方法与参数说明
Iperf使用方法与参数说明 http://pkgs.repoforge.org/iperf/ Iperf是一个网络性能测试工具.可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参 ...
- python_docx制作word文档详细使用说明【转】
目前网上对这一个库的介绍得很少,很零散,所以很多功能我是尽量参考其官网,但是官网上面很多功能目前只有说明文档,而代码并还没有及时更新,以至于按照官网上面做了,python却报错.比如:自定义表格的 ...
- How to make a USB stick use ISO image file in debian
4.3.1. Preparing a USB stick using a hybrid CD or DVD image Debian CD and DVD images can now be writ ...
- mcu 通信数据解析
串口发送一帧数据时,两个字节的间隔时间是多少? 波特率:发送二进制数据位的速率,习惯上用 baud 表示,即我们发送一位二进制数据的持续时间=1/baud. 如果波特率为9600,发送一个位需要的时间 ...
- [Python]Python章1 Python中_的故事
_xx 单下划线开头 Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范. 本文为译文,版 ...
- 微信小程序播放视频发送弹幕效果
首先.先来看一下效果图 然后.再看一下官方文档API对video的说明 相关属性解析: danmu-list:弹幕列表 enable-danmu:是否显示弹幕 danmu-btn:弹幕按钮 contr ...
- Epson Pos Printer for .net
注:因发现各网站爬虫随意收集文章,故做此声明:版权归原作者(Leaf.Duan)所有,转载还请著名出处,谢谢 设备信息 Epson TM-T88IV Thermal Printer,爱普生 TM-T8 ...
- service层代码相互调用, 导致spring循环依赖,设计上的优化
管理员创建用户需要发送激活邮件, 而发送激活邮件的时候需要判断发件人是不是合法的用户, 因此设计到一个循环依赖的问题 //UserService @Service class UserService{ ...
- 栈(NOIP2003&水题测试2017082501)
题目链接:栈 这题不难. 我们看一下,其实可以发现是卡特兰数. 不知道卡特兰数?没事,给你简单讲一下. 卡特兰数的递推式f(n)=f(0)*f(n-1)+f(1)*f(n-2)+-+f(n-2)*f( ...