Java实现文件上传的方法
本文实例为大家分享了Java实现文件上传的具体代码,具体内容如下
1、java代码:
packagecom.github.reston.servlet; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.PrintWriter; importjava.util.Iterator; importjava.util.List; importjavax.servlet.ServletConfig; importjavax.servlet.ServletException; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importorg.apache.commons.fileupload.FileItem; importorg.apache.commons.fileupload.FileItemFactory; importorg.apache.commons.fileupload.disk.DiskFileItemFactory; importorg.apache.commons.fileupload.servlet.ServletFileUpload; importorg.apache.commons.io.IOUtils; @WebServlet("/AjaxUpload") publicclassAjaxUploadextendsHttpServlet{ @Override publicvoidinit(ServletConfigconfig)throwsServletException{ //TODOAuto-generatedmethodstub super.init(config); } @Override protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ response.setContentType("text/html"); request.setCharacterEncoding("UTF-8"); booleanisMultipart=ServletFileUpload.isMultipartContent(request); StringbasePath=getServletContext().getRealPath("/upload"); FilebaseDirectory=newFile(basePath); Stringfilename=""; longstart=0; if(!baseDirectory.isDirectory())baseDirectory.mkdirs(); if(isMultipart){ try{ FileItemFactoryfactory=newDiskFileItemFactory(); ServletFileUploadupload=newServletFileUpload(factory); @SuppressWarnings("unchecked")List<FileItem>fileItems=upload.parseRequest(request); for(FileItemi:fileItems){ if(i.isFormField()){ Stringname=i.getFieldName(); Stringvalue=i.getString(); if(name.equals("start"))start=Long.parseLong(i.getString()); } } for(FileItemitem:fileItems){ if(item.isFormField())continue; filename=item.getFieldName(); if(mkdir(basePath)){ Filefileonserver=createFile(basePath,filename); if(fileonserver.length()==0){ FileOutputStreamfos=newFileOutputStream(fileonserver,true); IOUtils.copy(item.getInputStream(),fos); } if(start>0){ FileOutputStreamfos=newFileOutputStream(fileonserver,true); IOUtils.copy(item.getInputStream(),fos); } PrintWriterpw=response.getWriter(); pw.write("{\"length\":\""+fileonserver.length()+"\"}"); pw.flush(); } } }catch(Exceptione){ } } } privateFilecreateFile(Stringpath,Stringname)throwsIOException{ Filetmp=newFile(path,name); if(!tmp.exists()){ tmp.createNewFile(); } returntmp; } privatebooleanmkdir(Stringpath){ booleanresult=true; Filetmp=newFile(path); if(!tmp.isDirectory()){ result=tmp.mkdirs(); } returnresult; } }
2、java代码:
varajaxupload=function(e){ /** *eurlmethoddatasuccesserror */ varxmlhttprequest; if(window.XMLHttpRequest){ xmlhttprequest=newXMLHttpRequest(); if(xmlhttprequest.overrideMimeType){ xmlhttprequest.overrideMimeType("text/xml"); } }elseif(window.ActiveXObject){ varactiveName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; for(vari=0;i<activeName.length;i++){ try{ xmlhttprequest=newActiveXObject(activeName[i]); break; }catch(e){ return; } } } if(xmlhttprequest==undefined||xmlhttprequest==null){ alert("XMLHttpRequest对象创建失败!!"); return; }else{ this.xmlhttp=xmlhttprequest; } varfile=document.getElementById(e.id); if(this.xmlhttp!=undefined&&this.xmlhttp!=null){ e.method=e.method.toUpperCase(); if(e.method!="GET"&&e.method!="POST"){ alert("HTTP的请求方法必须为GET或POST!!!"); return; } if(e.url==null||e.url==undefined){ e.alert("HTTP的请求地址必须设置!"); return; } } this.xmlhttp.onreadystatechange=function(){ if(this.readyState==4){ if(this.status==200){ varresponseText=this.responseText; varresponseXML=this.reponseXML; if(e.success==undefined||e.success==null){ alert("没有设置处理数据正确返回的方法"); alert("返回的数据:"+responseText); }else{ e.success(responseText,responseXML); } }else{ if(e.error==undefined||e.error==null){ alert("没有设置处理数据返回失败的处理方法!"); alert("HTTP的响应码:"+this.status+",响应码的文本信息:"+this.statusText); }else{ e.error(this.status,this.statusText); } } } } //varformhtm="<formid='output'enctype='multipart/form-data'></form>"; varfilename=getFileName(e.id); this.xmlhttp.open(e.method,e.url,true); vardata=newFormData(document.getElementById("output")); data.append("name",filename); data.append("start",e.data.start); data.append(filename,document.getElementById(e.id).files[0].slice(e.data.start,getFileSize(e.id))); this.xmlhttp.send(data); } functiongetFileName(id){ varpath=document.getElementById(id).value varpos1=path.lastIndexOf('/'); varpos2=path.lastIndexOf('\\'); varpos=Math.max(pos1,pos2); returnpath.substring(pos+1); } functiongetFileSize(id){ returndocument.getElementById(id).files[0].size; }
3、html代码:
<!DOCTYPEhtml> <html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"> <scripttype="text/javascript"src="test.js"></script> </head> <body> <inputtype="file"name="upload"id="upload"value="上传"/><span>请选择要上传的文件(小于1G)</span> <inputtype="button"value="上传"onclick="test();"/> <formid="output"enctype="multipart/form-data"></form> <script> functiontest(){ ajaxupload({ id:"upload", url:"/PCC/reston/AjaxUpload", method:"POST", data:{start:0}, success:function(e){ varl=JSON.parse(e).length; ajaxupload({ id:"upload", url:"/PCC/reston/AjaxUpload", method:"POST", data:{start:l}, success:function(e){ }, error:function(e){ console.log(e); } }); }, error:function(e){ console.log(e); } }); } </script> </body> </html>
以上就是本文的全部内容,希望对大家学习java程序设计有所帮助。