标签:
一.先说说上传
第一步:
pom.xml文件 加上 上传文件依赖架包
1 <dependency> 2 <groupId>commons-fileupload</groupId> 3 <artifactId>commons-fileupload</artifactId> 4 <version>1.3.1</version> 5 </dependency>
并且在配置文件中配置:
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>
第二步:
页面添加 上传需要的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>
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 });
核心部分就是:
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 }
备注:
以上完成上传,在配置文件和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>
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();
仅Files.copy(inputStream, Paths.get(path));就可以实现文件拷贝。不需要自己创建数组的大小,效率极高。
标签:
原文地址:http://www.cnblogs.com/sxdcgaq8080/p/5848584.html