javaweb上传下载实例完整版解析(上)
程序员文章站
2024-03-07 15:19:27
在web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下javaweb...
在web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下javaweb中的文件上传和下载功能的实现,重点在文件上传
对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件。这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,struts上传的功能就是基于这个实现的。common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。
一、开发环境搭建
创建一个fileuploadanddownload项目,加入apache的commons-fileupload文件上传组件的相关jar包,如下图所示:
二、实现文件上传
2.1 文件上传页面
upload.html代码如下
<div> <h5>文件上传</h5><hr/> <form id="file_upload_id" name="file_upload_name" > <div><input type="file" name="file_upload"/></div> <div onclick = "upload()"><input type="button" value="上传" /></div><br> <div> <span id="typevalue"></span> <input id="type" type="hidden" name="input_type"> </div> <div> <span id="sizevalue"></span> <input id="size" type="hidden" name="input_size"> </div> </form> </div> <script> $(function(){ a(); }); function a(){ var size=1024 * 1024 * 50; var type= "gif,jpg,jpeg,png,bmp,swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb,doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2,jsp"; $("#type").val(type);//利用input传值到后台 $("#typevalue").html("文件格式限制为:"+type);//显示 $("#size").val(size); $("#sizevalue").html("文件大小限制为:"+size); } function upload(){ var formdata = new formdata($('#file_upload_id')[0]); $.ajax({ url: 'cloud/load/upload', type: 'post', data: formdata, datatype:'json', cache: false, processdata: false, contenttype: false , success : function(date){ alert("success"); }, error : function(e){ alert("error"); } }); } </script>
2.2 controller
package com.cloud.web.controller; import java.io.ioexception; import java.util.hashmap; import javax.annotation.resource; import javax.servlet.servletexception; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.stereotype.controller; import org.springframework.ui.modelmap; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.responsebody; import org.springframework.web.multipart.multipartfile; import com.cloud.web.service.fileloadservice; @controller @requestmapping("/load") public class loadcontroller { @resource public fileloadservice fileloadservice; @requestmapping(value = "/upload", method = requestmethod.post) @responsebody public hashmap<string,object> upload(@requestparam("file_upload") multipartfile file,@requestparam("input_type") string extname,@requestparam("input_size") string size, httpservletrequest request, httpservletresponse response, modelmap model) throws servletexception, ioexception { hashmap<string,object> map = new hashmap<string,object>(); request.setcharacterencoding("utf-8");// 解决上传的中文文件乱码问题 response.setcontenttype("text/html;charset=utf-8"); long filesizemax=long.parselong(size); string mes =fileloadservice.doupload(file,request, extname, filesizemax); map.put("mes", mes); return map; } }
2.3 service
fileloadserviceimpl.java程序如下:
package com.cloud.web.service.impl; import java.io.file; import java.io.fileoutputstream; import java.io.ioexception; import java.io.inputstream; import java.text.dateformat; import java.text.simpledateformat; import java.util.date; import javax.servlet.servletexception; import javax.servlet.http.httpservletrequest; import org.springframework.stereotype.service; import org.springframework.web.multipart.multipartfile; import com.cloud.web.service.fileloadservice; @service public class fileloadserviceimpl implements fileloadservice{ @override public string doupload(multipartfile file, httpservletrequest request, string extname, long filesizemax) throws servletexception, ioexception{ // 存放路径 string realpath = request.getsession().getservletcontext().getrealpath("/web-inf/")+"/upload/test/"; string msg="";//返回消息 try { string filename = file.getoriginalfilename();// 获取上传的文件的文件名 string fileext = filename.substring(filename.lastindexof(".") + 1).tolowercase();// 获取上传文件的扩展名 if (filename != null) { system.out.println("上传的文件的扩展名是:" + fileext); if(!extname.contains(fileext)){ system.out.println("上传文件扩展名是不允许的扩展名:" + fileext); msg = msg + "文件:" + filename + ",上传文件扩展名是不允许的扩展"; }else if(file.getsize() > filesizemax){ // 如果需要限制上传的文件大小,不超过最大限制 system.out.println("上传文件大小:" + file.getsize()); msg = msg + "文件:" + filename + ",上传文件大小超过限制大小"; }else{ date now = new date(); dateformat df = new simpledateformat("yyyymmddhhmmss"); string str = df.format(now); string nfilename=str+"_"+filename; // 生成一个子目录 string childdirectory = genchilddirectory(realpath); file storedirectory = new file(realpath + file.separator + childdirectory); //如果目录不存在,就创建一个 if (!storedirectory.exists()) { storedirectory.mkdirs(); } // 获取item中的上传文件的输入流 inputstream is = file.getinputstream(); //创建一个文件输出流 fileoutputstream out = new fileoutputstream(storedirectory + "\\" + nfilename); //创建一个缓冲区 byte buffer[] = new byte[1024]; //判断输入流中的数据是否已经读完的标致 int len = 0; while((len = is.read(buffer)) > 0){ out.write(buffer, 0, len); } out.close();//关闭输出流 is.close(); //关闭输入流 msg="file:" + filename + ",success"; } } } catch (exception e) { e.printstacktrace(); } return msg; } // 按照时间创建分目录 放置一个文件夹下面的文件过多 @override public string genchilddirectory(string realpath) { date now = new date(); dateformat df = new simpledateformat("yyyy-mm-dd"); string str = df.format(now); file file = new file(realpath, str); if (!file.exists()) { file.mkdirs(); } return str; } }
界面展示:
文件上传位置:
以上文件上传功能完成!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。