最近在做如何实现文件上传的相关工作,查阅了很多资料,发现网上写的都不是很直观,且调试复杂,经实验成功。
把form的target设为页面里一个看不见的iframe,这样上传时候就不会刷新页面了,比如 :
<form action="uploadFile" method="post" enctype="multipart/form-data" target="upload">
<input id="uploadfile" name="uploadfile" type="file"/><button>上传至FTP</button>
</form>
<iframe name="upload" style="display:none"></iframe>
后台方法代码如下:
public void uploadFile(HttpServletRequest request) throws IOException {
                //创建文件处理工厂,用于生成FileItem对象
DiskFileItemFactory difactory = new DiskFileItemFactory();
//设置缓存大小,如果上传问价超过缓存大小,将使用临时目录作为缓存
difactory.setSizeThreshold(1024*1024);
//设置处理工厂缓存的临时目录,此目录下的文件需要手动删除
// String realdir = request.getContextPath();//当前应用程序根路径
// System.out.println("realdir------------------"+realdir);
String dir = "D:/fileupload";
File filedir = new File(dir+"filetemp");
if(!filedir.exists()){
filedir.mkdir();
}
difactory.setRepository(filedir);
//设置文件实际保存的目录
String userdir = dir + "files";
File fudir = new File(userdir);
if(!fudir.exists()){
fudir.mkdir();
}
//创建request的解析器,它会将数据封装到FileItem对象中
ServletFileUpload sfu = new ServletFileUpload(difactory);
//解析保存在request中的数据并返回list集合
List list = null;
try{
list = sfu.parseRequest(request);
}catch(FileUploadException e){
e.printStackTrace();
}
//遍历list集合,去除每一个输入项的FileItem对象,并分别获取数据
for(Iterator it = list.iterator();it.hasNext();){
FileItem fi = (FileItem)it.next();
if(fi.isFormField()){
System.out.println("FileFieldName"+fi.getFieldName());
System.out.println("FileString--->"+fi.getString());
}else{
//由于客户端项服务器发送的文件时客户端的全路径,我们只需文件
String filename = fi.getName();
// int index = filename.lastIndexOf("\\");
// if(index != -1){
// filename = filename.substring(index+1);
//向服务器写出文件
InputStream in = fi.getInputStream();
FileOutputStream fos = new FileOutputStream(fudir+"/"+filename);
byte[] buf = new byte[1024];
int len = -1;
while((len = in.read(buf))!=-1){
fos.write(buf,0,len);
}
//关闭流
if(in!=null){
try{
in.close();
}finally{
if(fos!=null){
fos.close();
}
}
}
// }
}
}
}

最新文章

  1. TCP那些事
  2. ios Carthage
  3. NSMutable sort排序
  4. ECSHOP数据表结构完整仔细说明教程
  5. 图像本地预览插件(基于JQUERY、HTML5)
  6. Nginx 基本配置和日志分析
  7. PowerShell中调用外部程序和进程操作命令例子
  8. perl install module &amp;&amp; normal module
  9. python教程,文章list
  10. SQLite模糊查找(like)
  11. 前端js优化方案(连续更新)
  12. Django学习(5)优雅地分页展示网页
  13. 雷林鹏分享:XML 命名空间
  14. 利用shell脚本自动获取awr报表
  15. 【JSP】JSP中的Java脚本
  16. 说说前端那些事之ajax
  17. 03_Docker入门(上)之容器创建、容器使用、容器删除
  18. ACM选修HUST1058(市赛题) Lucky Sequence 同余定理
  19. Centos7.2yum安装时候出现db5错误的解决办法
  20. DW数据仓库与ODS的区别

热门文章

  1. (原)torch和caffe中的BatchNorm层
  2. MDX示例:求解中位数、四分位数(median、quartile)
  3. 电脑文本text和部分文字出现其他语言乱码
  4. awk的接口实现方案1
  5. [POJ] 1064 Cable master (二分查找)
  6. 考查嵌入式C开发人员的最好的16道题
  7. 屌炸天实战 MySQL 系列教程(二) 史上最屌、你不知道的数据库操作
  8. sort详解
  9. Linux shell编程 4 ---- shell中的循环
  10. [Spring入门学习笔记][静态资源]