Java_文件上传与下载(一)
来源:互联网 发布:away3d教程 源码 编辑:程序博客网 时间:2024/05/21 22:35
Servlet+IO实现
1.上传
(1)原理:
(2)实现:
注:省去了Servlet配置及前端JSP等
/* * 获取上传文件的流信息,保存至一个临时文件中 * 这样临时文件中就包含了上传文件的信息 * 需要做的就是从临时文件中取出上传文件的内容与名称 * 然后按取出的名称保存文件内容 */ //获取请求的输入流 InputStream is = req.getInputStream(); //定义一个临时文件,用于保存上传文件的流信息 File tempFile = new File("C:/Users/Sophon/Desktop/tempFile"); //读写文件 FileOutputStream fos = new FileOutputStream(tempFile); byte b[] = new byte[1024]; int n; while((n=is.read(b))!=-1){ fos.write(b,0,n); } //关闭输入输出流 fos.close(); is.close(); System.out.println("已保存至临时文件!"); /* * 从临时文件中获取上传的文件名称 * 文件名在tempFile的第二行末尾 * 最后一个双引号之中的就是 */ RandomAccessFile raf = new RandomAccessFile(tempFile,"r"); raf.readLine(); String str = raf.readLine(); //取到最后一个引号的索引 int endIndex=str.lastIndexOf("\""); //取到倒数第二个引号的索引并+1 String subStr = str.substring(0,endIndex-1); int beginIndex=subStr.lastIndexOf("\"")+1; //取到文件名 String fileName = str.substring(beginIndex,endIndex); System.out.println("上传文件的名称是:"+fileName); /* * 获取上传文件内容的起始位置 * 在第四行换行结束之后 */ //定位到tempFile文件的开始 raf.seek(0); long startPosition=0; int i=1; //连续读取4行,将起始位置指向第四行的换行处 while((n = raf.readByte())!=-1 && i<=4){ if(n=='\n'){ startPosition = raf.getFilePointer(); i++; } } /* * 获取上传文件内容的结束位置 * 在临时文件倒数第二行的换行处 */ //定位tempFile文件的结尾处,从后往前找,找倒数第二个换行符 raf.seek(raf.length()); long endPosition = raf.getFilePointer(); int j=1; while(endPosition>=0 && j<=2){ //从倒数第一个字节往回读,指针往回指即可 endPosition--; raf.seek(endPosition); if(raf.readByte()=='\n'){ j++; } } /* * 保存上传文件内容为最终文件 */ //创建保存文件 String filePath = req.getServletContext().getRealPath("/")+"images"; File file = new File(filePath); if(!file.exists()){ file.mkdir(); } File saveFile = new File(filePath,fileName); RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,"rw"); //将上传文件内容写入保存文件中 randomAccessFile.seek(0); raf.seek(startPosition); long startTime = System.currentTimeMillis(); while(startPosition<endPosition){ randomAccessFile.write(raf.readByte()); startPosition=raf.getFilePointer(); } long endTime = System.currentTimeMillis(); System.out.println("上传完成,耗时:"+(endTime-startTime)+"ms!"); //关闭输入输出流,删除临时文件 randomAccessFile.close(); raf.close(); tempFile.delete(); //反馈通知 req.setAttribute("result","上传成功!"); req.getRequestDispatcher("/jsps/upload01.jsp").forward(req,resp);
2.下载
(1)原理:
(2)实现:
注:省去了Servlet配置及前端JSP等
//设置文件下载路径 String filePath = getServletContext().getRealPath("/")+"images/"; String fileName = req.getParameter("filename"); File file = new File(filePath+fileName); if(file.exists()){ //设置头信息 //设置Content-Type头字段为application/octet-stream或者application/x-msdownload //设置Content-Disposition头为attachment;filename=FILENAME resp.setContentType("application/x-msdownload"); String attachmentSetting = "attachment;filename="+fileName; resp.setHeader("Content-Disposition", attachmentSetting); InputStream is = new FileInputStream(file); ServletOutputStream os = resp.getOutputStream(); //写入文件 byte b[] = new byte[1024]; int n; while((n=is.read(b))!=-1){ os.write(b,0,n); } //关闭流 os.close(); is.close(); }else{ req.setAttribute("downloadError","文件不存在,下载失败!"); RequestDispatcher dispatcher = req.getRequestDispatcher("/jsps/upload01.jsp"); dispatcher.forward(req, resp); }
0 0
- Java_文件上传与下载(一)
- Java_文件上传与下载(二)
- Java_文件上传与下载(三)
- 文件上传与下载(一)struts2
- Struts2上传与下载(一)- 单文件上传
- 框架(一)struts2——文件上传与下载
- IOS文件的上传与下载(一)
- 文件的上传和下载(一)
- 文件的上传和下载(一)
- 文件上传与下载----上传
- 文件上传与下载
- 文件上传与下载
- 上传与下载文件
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- Intel汇编语言程序设计学习-第四章 数据传送、寻址和算术运算-上
- 浏览器浏览记忆(history)几则技巧记录
- js 压缩图片 H5
- 批判性思维 带你走出思维的误区 原书第9版_(美)摩尔,(美)帕克著2012.01北京:机械工业出版社_P308_完整版PDF电子书下载 带索引书签目
- 【UOJ67】【JZOJ4679】种树
- Java_文件上传与下载(一)
- 采药2_纪中2540_dp
- 1045: 愚人节的礼物
- Linux基础总结之找工作阶段
- 在使用ffmpeg安装编译x265时候的错误
- Java判断文件类型
- Eclipse显示空白符,如空格、制表符、换行符等
- ajax -jsonp
- 安卓属性动画