码迷,mamicode.com
首页 > 编程语言 > 详细

【java 上传+下载】

时间:2016-09-07 12:28:38      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

一.先说说上传

第一步:
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 == "基因位点信息上传成功!"){
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 上传+下载】

标签:

原文地址:http://www.cnblogs.com/sxdcgaq8080/p/5848584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!