使用servlet实现文件上传
package com.zhanghaobo.fileupload; 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 UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
DiskFileItemFactory factory=new DiskFileItemFactory(); String realPath=req.getRealPath("/upload"); //物理缓存存放地
factory.setRepository(new File(realPath)); //设置内存存放大小
factory.setSizeThreshold(1024*1024); ServletFileUpload upload=new ServletFileUpload(factory);
//FileItem 可以表示文件(file)也可以表示文本域(form item) 有一个isFormField方法判断是否是表单
try{
List<FileItem> list=(List<FileItem>)upload.parseRequest(req);
for(FileItem item:list){
String name=item.getFieldName();
if(item.isFormField()){
String value=item.getString();
req.setAttribute(name, value);
}else{
String value=item.getName();
int start=value.lastIndexOf("\\");
String fileName=value.substring(start+1);
req.setAttribute(name, fileName);
//上传文件存放地
item.write(new File(realPath,fileName));
}
}
}catch(Exception e){
e.printStackTrace();
} req.getRequestDispatcher("showResult.jsp").forward(req, resp);
}
}
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
DiskFileItemFactory factory=new DiskFileItemFactory(); String realPath=req.getRealPath("/upload"); //物理缓存存放地
factory.setRepository(new File(realPath)); //设置内存存放大小
factory.setSizeThreshold(1024*1024); ServletFileUpload upload=new ServletFileUpload(factory);
//FileItem 可以表示文件(file)也可以表示文本域(form item) 有一个isFormField方法判断是否是表单
try{
List<FileItem> list=(List<FileItem>)upload.parseRequest(req);
for(FileItem item:list){
String name=item.getFieldName();
if(item.isFormField()){
String value=item.getString();
req.setAttribute(name, value);
}else{
String value=item.getName();
int start=value.lastIndexOf("\\");
String fileName=value.substring(start+1);
req.setAttribute(name, fileName); //上传文件存放地
// item.write(new File(realPath,fileName)); InputStream is=item.getInputStream(); long all=item.getSize(); OutputStream os=new FileOutputStream(new File(realPath,fileName)); byte[] buffer=new byte[400]; int length=0;
int l=0;
DecimalFormat df=new DecimalFormat("#.00");
while(-1!=(length=is.read(buffer))){
os.write(buffer,0,length);
l+=length;
System.out.println("总大小"+all+""+"进度:"+(df.format((double)l/all*100))+"%"+"已经读取的大小"+l);
} is.close();
os.close(); }
}
}catch(Exception e){
e.printStackTrace();
} req.getRequestDispatcher("showResult.jsp").forward(req, resp);
}
}
使用servlet实现文件上传的更多相关文章
- Servlet实现文件上传
一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip : 点击打开链接 2) commons- ...
- Servlet实现文件上传,可多文件上传
一.Servlet实现文件上传,需要添加第三方提供的jar包 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="mul ...
- 配置servlet支持文件上传
Servlet3.0为Servlet添加了multipart配置选项,并为HttpServletRequest添加了getPart和getParts方法获取上传文件.为了使Servlet支付文件上传需 ...
- jsp+servlet实现文件上传下载
相关素材下载 01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- java commons-fileupload servlet 多文件上传
commons-fileupload servlet 多文件上传 需要引入的 jar 包. commons-fileupload-1.3.2.jar commons-io-2.2.jar 工程路劲:查 ...
- servlet web文件上传
web文件上传也是一种POST方式,特别之处在于,需设置FORM的enctype属性为multipart/form-data. 并且需要使用文件域. servlet的代码比较关键是这几句: // 使用 ...
- 通过JSP+servlet实现文件上传功能
在TCP/IP中,最早出现的文件上传机制是FTP.它将文件由客户端到服务器的标准机制. 但是在JSP中不能使用FTP来上传文件,这是有JSP的运行机制所决定的. 通过为表单元素设置Method=&qu ...
- Servlet之文件上传
上传表单中的注意事项: 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法 表单 enctype 属性应该设置为multipart/form-data 下面的实例是借助于com ...
- 使用FileUpload实现Servlet的文件上传
简介 FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下的文件上传功能. FileUpload链接 FileUpload 是基于Apache的Commons ...
- Servlet中文件上传下载
1.文件下载: package FileUploadAndDown; import java.io.FileInputStream; import java.io.IOException; impor ...
随机推荐
- 文件IO
在unix世界中视一切为文件,无论最基本的文本文件还是网络设备或是u盘,在内核看来它们的本质都是一样的.大多数文件IO操作只需要用到5个函数:open . read . write . lseek 以 ...
- Linux用户(组)管理
在linux中系统中,它并不认识帐号名称.它认识的是我们的帐号ID,帐号ID保存在/etc/passwd文件中.我们在登录linux主机时,在输入完帐号和密码时,linux会先查找/etc/passw ...
- 部署HBase远程访问的问题集合(Eclipse)
实现远程访问HBase,可以通过Eclipse开发工具方便进行代码调试. 为了方便jar包各种版本的管理,才用maven进行代码构建 首先,下载并安装maven以及M2Eclipse插件 其次,配置m ...
- 如何调试Android Framework?
Linus有一句名言广为人知:Read the fucking source code. 但其实,要深入理解某个软件.框架或者系统的工作原理,仅仅「看」代码是远远不够的.就拿Android Frame ...
- Windows执行打开文件命令
ShellExecute(NULL, "open", localFile.c_str(), NULL, NULL, SW_SHOW); 会调用该文件类型关联的 ...
- HDU5828 Rikka with Sequence 线段树
分析:这个题和bc round 73应该是差不多的题,当时是zimpha巨出的,那个是取phi,这个是开根 吐槽:赛场上写的时候直接维护数值相同的区间,然后1A,结果赛后糖教一组数据给hack了,仰慕 ...
- linux中ls命令详解 (转)
-a -- 全部(all).列举目录中的全部文件,包括隐藏文件(.filename).位于这个列表的起首处的 .. 和 . 依次是指父目录和你的当前目录. -l -- 长(long).列举目 ...
- ren
- memset()实现及细节
memset是计算机中C/C++语言函数.将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为 ...
- (转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)
前一篇说到了Foundation框架中的NSDirctionary类,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSException. 注:其实按照Java ...