首页 > 代码库 > 【java 上传+下载】

【java 上传+下载】

一.先说说上传

第一步:
pom.xml文件 加上 上传文件依赖架包

技术分享
1           <dependency>2             <groupId>commons-fileupload</groupId>3             <artifactId>commons-fileupload</artifactId>4             <version>1.3.1</version>5         </dependency>      
View Code

 

并且在配置文件中配置:

技术分享
1 <!-- 实现文件上传,这样一旦某个Request是一个MultipartRequest,它就会首先被MultipartResolver处理,然后再转发相应的Controller -->2     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">3          <!-- 设置上传文件的最大尺寸为1GB -->4           <property name="maxUploadSize">5               <value>1073741824</value>6          </property>7     </bean>
View Code


第二步:

页面添加 上传需要的input框和按钮

upload.jsp代码:

技术分享
 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3  4  5 <% 6 String path = request.getContextPath(); 7 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 8 %> 9 <!DOCTYPE HTML>10 <html>11 <head>12 <meta charset="utf-8">13 <meta name="renderer" content="webkit|ie-comp|ie-stand">14 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">15 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,member-scalable=no" />16 <meta http-equiv="Cache-Control" content="no-siteapp" />17 <link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css"/>18 <link rel="stylesheet" href="../upload/css/default.css" />19 <link media="all" rel="stylesheet"  href="../upload/css/fileinput.css"/>    20 <title>上传位点信息</title>21 </head>22 <body>23 <div class="pd-20">24               <form enctype="multipart/form-data" method="post">25                 <div class="form-group">26                     <input id="file-4" type="file" class="file" data-upload-url="#">27                 </div>28                 <hr>29                 <div class="form-group col-lg-3" style="margin-left:30%;padding-left:5%;">30                     <button class="btn btn-info" type="reset">刷新</button>31                     <button class="btn btn-primary  upFileButton" type="button">上传</button>32                     <button class="btn btn-default" type="reset">重置</button>33                 </div>34             </form>35 </div>36 37 <script type="text/javascript" src="../lib/jquery/1.9.1/jquery.min.js"></script> 38 <script type="text/javascript" src="../lib/layer/1.9.3/layer.js"></script>39 <script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>40 <script type="text/javascript" src="../upload/js/fileinput.js"></script>41 <script type="text/javascript" src="../js/geneinfo/disease/upload.js"></script>42 </body>43 </html>
View Code

input上传框如果想要好看一点的样子或者拖拽功能,可以使用页面上引用的CSS【upload/css/default.css和upload/css/fileinput.css】和JS【/upload/js/fileinput.js】这是引用别人现成的插件,可以网上找更好的资源来用。


upload.js代码:上传按钮的绑定事件

技术分享
 1 $(document).ready(function(){ 2      3         /** 4          * 上传按钮 5          */ 6         $(".upFileButton").click(function(){ 7              8                 var file = $("#file-4").val(); 9                 if(file == ""){10                      layer.msg(‘选择上传文件后进行操作!‘, {11                           icon: 4,12                           time: 2000 13                         }, function(){14                         });15                 }else{16                     var fd = new FormData();17                     fd.append("upfile", $("#file-4").get(0).files[0]);18                     $.ajax({19                         url: "uploadFile.htmls?diseaseName="+parent.diseaseName+"&diseaseId="+parent.diseaseId1,20                         type: "POST",21                         processData: false,22                         contentType: false,23                         data: fd,24                         success: function(data) {25                             if(data =http://www.mamicode.com/="基因位点信息上传成功!"){26                                 layer.msg(data, {27                                       icon: 1,28                                       time: 2000 29                                     }, function(){30                                     });31                                 parent.layer.close(parent.upload);32                             }else{33                                 layer.msg(data, {34                                       icon: 4,35                                       time: 2000 36                                     }, function(){37                                     });38                             }39                             40                         }41                     });42                 }43                 return ;44         });45 });
View Code

 


核心部分就是:
var fd = new FormData();
fd.append("upfile", $("#file-4").get(0).files[0]);

 

第三步:

在服务器上处理接收过来的file文件:以输入流的形式读取到服务器端,再以输出流将temp临时文件写到服务器的磁盘上,就完成上传功能。


Controller核心部分:
【核心类 MultipartFile】

技术分享
 1 @RequestMapping("/uploadFile") 2     @ResponseBody 3     public String uploadFile(@RequestParam("upfile")MultipartFile partFile,HttpServletRequest request,String diseaseName,String diseaseId) throws IOException, EncryptedDocumentException, InvalidFormatException{//MultipartFile这里得到了上传的文件 4          5          // 得到上传服务器的路径 6           String path = "d:/file-ave/"; 7           // 得到上传的文件的文件名 8           String filename = partFile.getOriginalFilename(); 9           InputStream inputStream = partFile.getInputStream();10           byte[] b = new byte[1073741824];11           int length = inputStream.read(b);12           path += filename;13           // 文件流写到服务器端14           FileOutputStream outputStream = new FileOutputStream(path);15           outputStream.write(b, 0, length);16           inputStream.close();17           outputStream.close();18           19           20         return "";21     }
View Code

 

 

备注:

以上完成上传,在配置文件和controller中都限定了允许上传的最大文件为1G.我们可以去掉文件大小的限制,大文件也可以进行上传!

可以配置文件中将大小限制去掉:

技术分享
1  <!-- 实现文件上传,这样一旦某个Request是一个MultipartRequest,它就会首先被MultipartResolver处理,然后再转发相应的Controller -->2     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">3          <!-- 设置上传文件的最大尺寸为1GB -->4          <!-- <property name="maxUploadSize">5           <value>1073741824</value>6          </property> -->7     </bean>
View Code

 

JDK1.7提供使用NIO进行读写操作,Controller中可以修改为:

即下面的方法二

技术分享
 1     String path = "d:/file-ave/"+productName+"/"+diseaseName+"/"; 2                   // 得到上传的文件的文件名 3                   String filename = partFile.getOriginalFilename(); 4                   InputStream inputStream = partFile.getInputStream(); 5  6                   DecimalFormat df = new DecimalFormat(); 7                   String fileSize = partFile.getSize()/1024>100 ? (partFile.getSize()/1024/1024>100? df.format(partFile.getSize()/1024/1024/1024)+"GB" :df.format(partFile.getSize()/1024/1024)+"MB" ) :df.format(partFile.getSize()/1024)+"KB"; 8                   9                  10                  11                   //方法1:配置文件中有配置最大文件大小12                   /*byte[] b = new byte[1073741824];13                   int length = inputStream.read(b);14                   path += filename;15                   // 文件流写到服务器端16                   FileOutputStream outputStream = new FileOutputStream(path);17                   outputStream.write(b, 0, length);18                   inputStream.close();19                   outputStream.close();*/20                   //方法2:21                   path += filename;22                   long start = System.currentTimeMillis();23                   Files.copy(inputStream, Paths.get(path));24                   System.out.println(((double)System.currentTimeMillis()-start)/1000);25                   inputStream.close();
View Code

仅Files.copy(inputStream, Paths.get(path));就可以实现文件拷贝。不需要自己创建数组的大小,效率极高。

 

【java 上传+下载】