最近生活过的很充实,人一直在不停的忙碌着学习新东西。这是我最近遇到的问题,我找度娘n了很久,终于找到了解决方案!
前台代码:
<script> ext.onready(function() { ext.create('ext.form.panel', { title : '文件上传', width : 400, bodypadding : 10, frame : true, renderto : document.body, items : [ { xtype : 'filefield', name : '文件', fieldlabel : 'file', labelwidth : 50, msgtarget : 'side', allowblank : false, anchor : '100%', buttontext : '请选择文件...' } ], buttons : [ { text : '上传', handler : function() { var form = this.up('form').getform(); if (form.isvalid()) { form.submit({ url : '根路径/fileuploaddown/fileupload', waitmsg : '正在上传文件中...', success : function(fp, o) { ext.msg.alert('上传文件成功!'); } }); } } } ] }); }); </script>
后台代码:
/** *记录返回结果*/ class extjsformresult { private boolean success; public boolean issuccess() { return success; } public void setsuccess(boolean success) { } public string tostring() { return "{success:" + this.success + "}"; } } class fileuploadbean { private commonsmultipartfile file; public commonsmultipartfile getfile() { return file; } public void setfile(commonsmultipartfile file) { this.file = file; } } /** * 文件的上传与下载 * @author administrator * */ @controller @requestmapping(value = "/fileuploaddown") public class fileuploadanddowncontroller { private static int countter=1; //定义一个计数器,用于上传文件的重命名 @autowired private proannexdao<proannex> proannextdao; public void setproannextdao(proannexdao<proannex> proannextdao) { this.proannextdao = proannextdao; } @requestmapping(value="fileupload",method = requestmethod.post) public @responsebody string create(redirectattributes redirectattributes,fileuploadbean uploaditem, bindingresult result,httpsession session){ //获取根路径 string uploadfolderpath = session.getservletcontext().getrealpath("/"); extjsformresult extjsformresult = new extjsformresult(); try { if (result.haserrors()) { for (objecterror error : result.getallerrors()) { system.err.println("error: " + error.getcode() + " - " + error.getdefaultmessage()); } // 设置extjs返回 - error extjsformresult.setsuccess(false); return extjsformresult.tostring(); } multipartfile file = uploaditem.getfile(); string filename = null; inputstream inputstream = null; outputstream outputstream = null; if(file.getsize()>0){ system.out.println("file size:::" + file.getsize()); if(file.getsize()>5242880){ system.out.println("file size:::" + file.getsize()); extjsformresult.setsuccess(false); return "error"; } inputstream = file.getinputstream(); file newfile = new file(uploadfolderpath + "fileupload/"); //如果文件路径不存在就新建一个 if(!newfile.exists()){ newfile.mkdirs(); } //获取文件名 string name=file.getoriginalfilename(); //从数据库中查询存在此类文件名否 long count=proannextdao.isrepeatname(name); //如果存在一样的文件名,就进行从命名 if (count>0) { name=name.substring(0, name.lastindexof("."))+"("+(countter++)+")"+name.substring(name.lastindexof(".")); } filename = uploadfolderpath + "fileupload/" + name; outputstream = new fileoutputstream(filename); int readbytes = 0; byte[] buffer = new byte[10000]; while ((readbytes = inputstream.read(buffer, 0, 10000)) != -1) { outputstream.write(buffer, 0, readbytes); } outputstream.close(); inputstream.close(); } // 设置extjs返回 - sucsess extjsformresult.setsuccess(true); } catch (exception e) { e.printstacktrace(); // 设置extjs返回 - error extjsformresult.setsuccess(false); } return extjsformresult.tostring(); } }
springmvc.xml(此文件名可能跟项目的实际情况有区别)中的配置:
<!-- 上传文件,限制大小的配置 --> <bean id="multipartresolver" class="org.springframework.web.multipart.commons.commonsmultipartresolver"> <!--resolvelazily属性启用是为了推迟文件解析,以便在upload中捕获文件大小异常--> <property name="resolvelazily" value="true"/> <property name="maxuploadsize" value="5242880" /> </bean> <!-- 将无法mapping到controller的path交给default servlet handler处理 --> <mvc:default-servlet-handler/><!-- 使用默认的servlet来响应静态文件 --> <!-- 文件的上传与下载 --> <mvc:view-controller path="/" view-name="redirect:/fileuploaddown"/>
以上的就是上传文件了。
那下载呢?
下载比较简单,代码如下:
@requestmapping("/downloadfile") public void download(@valid @modelattribute("downloadname") string downloadname, httpservletresponse response,httpsession session,bindingresult result,httpservletrequest request) throws ioexception { response.setcharacterencoding("utf-8"); request.setcharacterencoding("utf-8"); //获取文件的路径 string url=session.getservletcontext().getrealpath("/")+"/fileupload/"+downloadname; system.out.println(url); file file=new file(url); inputstream input = fileutils.openinputstream(file); byte[] data = ioutils.tobytearray(input); //system.out.println("文件名:"+downloadname); response.reset(); //设置响应的报头信息(中文问题解决办法) response.setheader("content-disposition","attachment;filename="+urlencoder.encode(downloadname, "utf-8")); response.addheader("content-length", "" + data.length); response.setcontenttype("application/octet-stream; charset=utf-8"); ioutils.write(data, response.getoutputstream()); ioutils.closequietly(input); }
在界面上只要有一个连接地址:如:window.location.href="根路径/fileuploaddown/downfile/downloadname=" rel="external nofollow" +name;这样就可以下载了.... 超连接的写法基本一样,这里就不多说了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问, 点击进行留言回复!!
springcloud中feign调用处理mybatis-plus Ipage反序列化问题。
Flume 史上最全面的大数据学习第十篇(一) 别再说不知道flume是什么了
网友评论