Java文件上传

comers 贡献于2011-01-25

作者 番茄花园  创建于2008-02-29 05:53:00   修改者Administrator  修改于2010-11-27 09:55:00字数6533

文档摘要:文件上传的简单方法:(原理性的实验)。
关键词:

文件上传的简单方法:(原理性的实验) 1.
附件:
2. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { InputStream is = request.getInputStream(); //获得request的输入流 FileOutputStream fos = new FileOutputStream(new File("d:/testUpload.jpg")); byte[] b = new byte[1024]; while(is.read(b)!=-1){ fos.write(b); } 输入流和输出流内容copy is.close(); fos.close(); 一定要记得关闭打开的流资源。 } 使用commons-fileupload组件实现的基本上传: 1. 加jar包:commons-fileupload.jar, commons-io.jar 2. JSP页面中增加form:
3. 增加servlet: public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String tempDirectory = "d:/temp/"; //要在最后加上斜杠:temp/ try { int sizeThreshold = 1024 * 64; //写满该大小的缓存后,存入硬盘中。 File repositoryFile = new File(tempDirectory); FileItemFactory factory = new DiskFileItemFactory(sizeThreshold, repositoryFile); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(500 * 1024 * 1024); // set every upload file'size less than 500M List items = upload.parseRequest(request); //这里开始执行上传 Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); //FileItem就是表示一个表单域。 if(item.isFormField()){ //isFormField方法用于判断FileItem是否代表一个普通表单域(即非file表单域) System.out.println("***"+item.getFieldName()); }else { // String fieldName = item.getFieldName(); //获取表单域name属性的值 // String fileName = item.getName(); //返回该文件在客户机上的文件名。e.g: e:\dianying\\video\1.wmv // System.out.println("*****"+fieldName); // System.out.println("*****"+fileName); String path = item.getName(); String fileName = path.substring(path.lastIndexOf("\\")); File uploadedFile = new File("d:/video/" + fileName); item.write(uploadedFile); } } } catch (Exception e) { e.printStackTrace(); } } 使用commons-fileupload和DWR实现带有进度条的上传:(会用即可。) 1%, 5%, 10% à 已经上传的数据/数据的总大小 ******** 1. 增加jar: commons-fileupload.jar, commons-io.jar, dwr.jar 2. upload.jsp页面中增加: <%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> 视频上传
地址:
进度数据。
3. 在images/下面引入:gold_bg.gif, glob.gif两个图片。 4. 引入upload.js:( 控制进度条的主要程序) function refreshProgress() { UploadMonitor.getUploadInfo(updateProgress); } function updateProgress(uploadInfo) { if (uploadInfo.inProgress) { document.getElementById('uploadbutton').disabled = true; document.getElementById('file1').disabled = true; var fileIndex = uploadInfo.fileIndex; var progressPercent = Math.ceil((uploadInfo.bytesRead / uploadInfo.totalSize) * 100); document.getElementById('eProgress').style.width = progressPercent + '%';进度条显示。 document.getElementById('ppop').innerHTML=progressPercent + '%';进度数据显示 window.setTimeout('refreshProgress()', 3000);向后台发送得到文件大小的请求。 } else { document.getElementById('uploadbutton').disabled = false; document.getElementById('file1').disabled = false; } return true; } function startProgress() { var s = document.newForm.file1.value ; var i = s.lastIndexOf("."); var var1 = s.substring(i+1) ; if(var1 != "asf" && var1 !="wmv" && var1 !="avi" && var1 !="mpeg" && var1 !="mpg" && var1 !="rm" && var1 !="rmvb" && var1 !="vob" && var1 !="3gp" && var1 !="mp4" && var1 !="swf" && var1 !="flv") { alert("文件格式不是视频格式,请重新选择文件!!"); return false; } 文件格式验证。不符合格式的不能提交。 document.getElementById('progressBar').style.display = 'block'; document.getElementById('uploadbutton').disabled = true; // wait a little while to make sure the upload has started .. window.setTimeout("refreshProgress()", 1500); return true; } 5. dwr.xml中增加: 6. copy文件到com.puckasoft.video.upload包下面。(一共7个java文件) 7. UploadFile.java这是个处理上传的servlet 中的代码: public class UploadFile extends HttpServlet { protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String tempDirectory = Constant.uploadFileTemp这里是定义的常量类,放置一些常量 ; // 必须加后面的斜杠 String fileDirectory = this.getServletContext().getRealPath("\\vfile")+"\\必须要加上 ";; // where the upload file saved String outFileName = null; try { UploadOutputStreamListener uploadOutputStreamListener = new UploadOutputStreamListener(request, 1);与普通上传的区别。 int sizeThreshold = 1024 * 64; //写满该大小的缓存后,存入硬盘中。 File repositoryFile = new File(tempDirectory); FileItemFactory factory = new MonitoredDiskFileItemFactory( sizeThreshold, repositoryFile, uploadOutputStreamListener); 与普通上传的区别。 ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(500 * 1024 * 1024); // set every upload file'size less than 500M List items = upload.parseRequest(request); //这里开始执行上传 Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); //FileItem就是表示一个表单域。 if(item.isFormField()){ //isFormField方法用于判断FileItem是否代表一个普通表单域(即非file表单域) System.out.println(item.getFieldName()); }else { String fieldName = item.getFieldName(); //获取表单域name属性的值 String fileName = item.getName()这个方法火狐返回文件名,ie返回路径加文件名 ; //返回该文件在客户机上的文件名。e.g: d:/video/1.wmv String filesize = String.valueOf(item.getSize()); int site = fileName.lastIndexOf("\\"); if (site!=-1) { fileName = fileName.substring(site + 1); } String fileType = fileName.substring(fileName.lastIndexOf("."));获得后缀 String absoluteName=new Date().getTime()+fileType ; //存储在本地硬盘上的文件名 outFileName = fileDirectory + absoluteName; File uploadedFile = new File(outFileName); item.write(uploadedFile); request.setAttribute("videoFilePath", absoluteName); } } } catch (Exception e) { e.printStackTrace(); } rd.forward(request, response); //成功后的跳转 } }

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档