文件上传与下载----上传
实现web开发中的文件上传功能,需完成如下二步操作:
FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型,默认的缺省值是“application/x-www-form-
urlencoded”。 然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。文
件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。Browser
端<form>表单的ENCTYPE属性值为multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传
输的都是大量的数据,所以规定上传文件必须是post方法,<input>的type属性必须是file。
上传文件中应当注意的细节:
手工转码,用户名的乱码问题:
paramValue= new String(paramValue.getBytes("iso8859-1"),"utf-8");
利用FileItem类的getString(String encoding)
String getString(String encoding) throws UnsupportedEncodingException
如表示url资源时应该用斜杠 “/”
如表示硬盘路径时用斜杠“\\”
factory.setRepository(new File(this.getServletContext().getRealPath("/temp")));
……
FileItem item;
……
item.delete();
5、 限制文件上传的最大值问题:
调用解析器的:upload.setFileSizeMax(1024*1024); //上传文件不能超过1M。如果超出大小,需要给用户友好提示:
try{
……
}catch (FileUploadBase.FileSizeLimitExceededException e) {
request.setAttribute("message", "上传文件不能超过1M!!");
}
6、 ProgressListener 显示上传进度问题:
ProgressListener progressListener = new ProgressListener() {
public void update(long pBytesRead, long pContentLength, int pItems) {
System.out.println("到现在为止, " + pBytesRead + " 字节已上传,总大小为 " + pContentLength);
}
};
upload.setProgressListener(progressListener);
<form action="${pageContext.request.contextPath}/servlet/UploadServlet2" enctype="multipart/form-data" method="post">
用户名:<input type="text" name="username" /><br/>
文件1<input type="file" name="file1" /><br/>
文件2<input type="file" name="file2" /><br/>
<input type="submit" value="上传" /><br/>
UploadServlet.java
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;
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.FileUploadBase.FileSizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// request.setCharacterEncoding("UTF-8");
try {
// 1、建立工厂对象
DiskFileItemFactory factory = new DiskFileItemFactory();
//factory.setRepository(new File("F:\\"));
// 2、得到上传文件解析器
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");//处理上传文件
// 3、设定上传文件尺寸
upload.setFileSizeMax(1024*1024);
// 4、进行解析,得到fileItem对象
List<FileItem> list = upload.parseRequest(request);
// 5、对list进行迭代处理
for (FileItem item : list) {
if (item.isFormField()) {// 表单普通输入项
String paramName = item.getFieldName();
//String paramValue = item.getString();
//paramValue = new String(paramValue.getBytes("ISO8859-1"),"UTF-8");
String paramValue=item.getString("utf-8");
System.out.println("普通输入项" + paramName + "==" + paramValue);
} else {// 上传文件处理
//获取上传文件名
String fileName = item.getName();
// 如果文件xxx中有目录,则去掉目录部分只保留文件名
fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
System.out.println("name =" + fileName);
if (!fileName.equals(" ")) {
fileName =refactorFileName(fileName) ;
System.out.println("filename = " + fileName);
InputStream in = item.getInputStream();
File file = new File("F:\\" + fileName);
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len = 0;
while ((len - in.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.flush();
fos.close();
in.close();
item.delete();
request.setAttribute("message", "文件上传成功");
}
}
}
}catch(FileSizeLimitExceededException e1){
e1.printStackTrace();
request.setAttribute("message", "上传文件尺寸太大!!!");
}catch (FileUploadException e) {
e.printStackTrace();
request.setAttribute("message", "文件上传失败!!!");
}
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
public String refactorFileName(String fileName){
return UUID.randomUUID().toString() + "_" + fileName;
}
}
文件上传与下载----上传相关推荐
- windows主机用scp命令向Linux服务器上传和下载文件
windows主机用scp命令向Linux服务器上传和下载文件 文章目录: 一.scp介绍 二.scp上传和下载 1.上传 2.下载 三.scp的更多参数 一.scp介绍 scp是secure cop ...
- JavaWeb -- Struts1 多文件上传与下载 DownloadAction, DispatchAction
1. 多文件上传与下载 上传下载jsp: <%@ page language="java" import="java.util.*" pageEncodi ...
- nginx java文件上传_Nginx实现文件的上传和下载
文件的上传只要保证特殊的地址先到达Nginx,然后通过Nginx指定至指定的服务器即可,目前配置是本机.文件的下载的做法就是把本机的当前目录下面的文件给返回回去. server { listen ; ...
- 将本地文件上传或下载到Linux云服务器的三种方法
1.WinSCP 这款软件可以在windows操作系统中进行安装使用.具有图形化界面,比较友好,操作简单.功能全面,适合刚入门的菜鸟乃至老鸟进行使用. WinSCP 可以执行所有基本的文件操作,例如下 ...
- .Net简单上传与下载
.Net简单上传与下载 上传: 首先上传我们需要一个控件-FileUpLoad: 再加上一个上传按钮: 在上传按钮的Click事件中添加如下代码: 1 FileUpload1.SaveAs(Serve ...
- java上传加密_Java上传下载文件并实现加密解密
使用 Jersey 服务器实现上传,使用 HTTP 请求实现下载 引入依赖 在 pom.xml 中添加 Jersey 相关依赖 com.sun.jersey jersey-client 1.18.1 ...
- Angular 文件上传与下载
Angular文件上传与下载 文件上传 方式1 使用NG ZORRO中的组件. 文件下载 方式1 直接下载 方式2 通过HTTP请求后端数据的方式进行下载 文件上传 方式1 使用NG ZORRO中的组 ...
- [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
转自:http://blog.csdn.net/soarheaven/archive/2008/12/08/3474152.aspx 最近项目需要对FTP服务器进行操作,现把实现总结如下: 打算分2篇 ...
- Linux 中 3 个文件打包上传和下载相关命令详解
tar 命令 通过 SSH 访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar 命令就是必不可少的一个功能强大的工具.Linux 中最流行的tar是麻雀虽小,五脏俱全,功能强大. 使用t ...
最新文章
- [16] 螺旋面(Spire)图形的生成算法
- UIDatePicker | 时间选择器
- Springboot注册Filter
- aix 的c库为什么都是静态库_卢卡库:若梅罗、莱万都在努力突破极限,为什么我不能做到呢...
- zookeeper集群安装部署
- java集合性能测试,关于Map和List的性能测试
- PHP100个知识点之2 日期时间(一)
- MySQL 导入 csv、excel 或者 sql 文件
- android音频杂音问题_三星手机与iOS13 双蓝牙音频输出功能体验报告 「Soomal」
- C# 匿名函数 详解
- 优化理论03----优化导论和无约束问题的最优条件、优化问题的类型、局部、全局和严格优化、梯度和Hessian 黑塞矩阵和方向导数、无约束问题的最优条件
- STM8 GPIO输入输出模式
- 11月14日Fluent建模笔记
- 大二Web课程设计——张家界旅游网站设计与实现(HTML+CSS+JavaScript)
- 关于十六进制发送和显示(VS上位机和下位机)
- 高德地图放图钉_Google地图中的图钉掉了-如何定位和删除图钉
- 深圳高新区发展专项计划管理办法(征求意见稿)
- css来回摆动,css3 animation(左右摆动) (放大缩小)
- android 设置路由器,安卓手机怎么设置路由器?
- 计算机 学院派,总校计算机学院派老师来校召开“2+2”联合培养班学生见面会...
热门文章
- jq的三种选择qi_您已经选择了带有qi无线充电功能的无线耳机
- 【硬核扫盲】到底什么是相干光通信?
- android之使用QQ互联实现qq账号登录App
- 怎么申请专利?专利多久下证?专利申请费用多少?
- oa移动办公怎么修改服务器端口,移动办公oa怎么知道服务器地址
- 考研英语一复习经验帖【干货】
- window10总提示幸福倒计时,解决方法
- [洛谷P3758][TJOI2017]可乐
- PFM格式图像和读取middlebury 数据集
- 痞子衡嵌入式:PCM编码与Waveform音频文件(.wav)格式详解