首页 > 代码库 > 【java 上传+下载】
【java 上传+下载】
一.先说说上传
第一步:
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 =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 });
核心部分就是:
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));就可以实现文件拷贝。不需要自己创建数组的大小,效率极高。
【java 上传+下载】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。