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程序设计有所帮助。