java-uploadify 批量上传文件到七牛云

来源:互联网 发布:剑三藏剑成男脸型数据 编辑:程序博客网 时间:2024/06/01 12:13
  1.  搭建一个简单的SpringMVC框架
  2. 需要的jar包:
          1. okhttp-3.2.0.jar
          2. okio-1.9.0.jar
          3.qiniu-java-sdk-7.2.7.jar
          下载地址:
          链接:http://pan.baidu.com/s/1o7IWMh0 密码:73fk
  1. 前端需要的资源:
          1.uploadify.css
          2.jquery-1.4.2.min.js
          3.jquery.uploadify.min.js
          4.uploadify.swf
          5.cancel.png
          下载地址:
          链接:http://pan.baidu.com/s/1c2w6KKC 密码:g607
  1. 上传页面编写:index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>jquery upload</title>
    <link rel="stylesheet" href="uploadify/uploadify.css" type="text/css"></link> 
    <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="uploadify/jquery.uploadify.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#file_upload").uploadify({
                //指定swf文件
                'swf': 'uploadify/uploadify.swf',
                //后台处理的页面
                'uploader': 'upload/testQiNiu.do',
                'progressData' : 'speed',
                //按钮显示的文字
                'buttonText': '上传文件',
                //显示的高度和宽度,默认 height 30;width 120
                //'height': 15,
                //'width': 80,
                //上传文件的类型  默认为所有文件    'All Files'  ;  '*.*'
                //在浏览窗口底部的文件类型下拉菜单中显示的文本
                'fileTypeDesc': 'All Files',
                //允许上传的文件后缀
                //'fileTypeExts': '*.gif; *.jpg; *.png',
                'cancel': 'uploadify/cancel.png',
                //上传文件页面中,你想要用来作为文件队列的元素的id, 默认为false  自动生成,  不带#
                'queueID': 'fileQueue',
                //选择文件后自动上传
                'auto': false,
                //设置为true将允许多文件上传
                'multi': true,
                /* 'onUploadComplete' : function(file) {
                     alert('上传完成');
                 }, */
                'onCancel' : function(file) {
                     alert('取消上传');
                 }
            });
        });
    </script>
  </head>
  <body>
    <div id="fileQueue"></div> 
    <input type="file" name="file_upload" id="file_upload" />
    <p> 
        <a href="javascript:$('#file_upload').uploadify('upload','*')">开始上传</a>  
        <a href="javascript:$('#uploadify').uploadify('cancel')">取消所有上传</a> 
    </p> 
  </body>
</html>


  1. 工具类编写:IPTimeStamp.java
          利用客户端IP+时间+三位随机数字生成非重复文件名
          
package com.qiang;
//PTimeStamp.java
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class IPTimeStamp {
     private String ip;
     private Date date;
     private SimpleDateFormat format;
     public IPTimeStamp() {
           try {
                ip = InetAddress.getLocalHost().getHostAddress();
           } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
           }
     }
     public String getTimeStamp() {
           format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
           return format.format(new Date());
     }
     public String addZero(String str, int len) {
           StringBuffer sb = new StringBuffer();
           sb.append(str);
           while (sb.length() < len) {
                sb.insert(0, "0");
           }
           return sb.toString();
     }
     public String getIPTimeStampRandom() {
           StringBuffer sb = new StringBuffer();
           String[] ips = this.ip.split("\\.");
           for (int j = 0; j < ips.length; j++) {
                // System.out.println(ips[j]);
                sb.append(this.addZero(ips[j], 3));
           }
           sb.append(this.getTimeStamp());
           Random rod = new Random();
           for (int i = 0; i < 3; i++) {
                sb.append(rod.nextInt(10));
           }
           return sb.toString();
     }
}
  1. 文件上传控制器编写:UploadController.java
package com.qiang;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
@Controller
@RequestMapping("/upload")
public class UploadController {
     //设置好账号的ACCESS_KEY和SECRET_KEY
       String ACCESS_KEY = "Le8jyHg71J7UuV***KYUmF-UMbJOZgmLMO"; //这两个登录七牛 账号里面可以找到
       String SECRET_KEY = "VMO5cIW***ifokRkefGE_WWxKmC2n2d";
       //要上传的空间
       String bucketname = "usercenterfilesccw"; //对应要上传到七牛上 你的那个路径(自己建文件夹 注意设置公开)
       //上传到七牛后保存的文件名
       String key = "test.doc"
       //密钥配置
       Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
       //创建上传对象
       Configuration conf=new Configuration();
      
       UploadManager uploadManager;
       {
             uploadManager=new UploadManager(conf);
       }
     /**上传到本地服务器
      * @param request
      * @param response
      */
     @RequestMapping("/test.do")
     public void test(HttpServletRequest request,HttpServletResponse response){
           String savePath = request.getSession().getServletContext()
                .getRealPath("");
           // 得到项目的工作目录
           savePath = savePath + "/uploads/";
           File f1 = new File(savePath);
           // 如果没有的话就创建目录
           if (!f1.exists()) {
                f1.mkdirs();
           }
           DiskFileItemFactory fac = new DiskFileItemFactory();
           ServletFileUpload upload = new ServletFileUpload(fac);
           upload.setHeaderEncoding("utf-8");
           List<FileItem> fileList = null;
           try {
                fileList = upload.parseRequest(request);
           } catch (FileUploadException ex) {
                return;
           }
           Iterator<FileItem> it = fileList.iterator();
           String name = "";
           String extName = "";
           while (it.hasNext()) {
                FileItem item = it.next();
                if (!item.isFormField()) {
                     // 解析文件
                     name = item.getName();
                     long size = item.getSize();
                     String type = item.getContentType();
                     if (name == null || name.trim().equals("")) {
                           continue;
                     }
                     // 得到文件的扩展名
                     if (name.lastIndexOf(".") >= 0) {
                           extName = name.substring(name.lastIndexOf("."));
                     }
                     File file = null;
                     do {
                           // 利用客户端IP+时间+三位随机数字生成非重复文件名:
                           name = new IPTimeStamp().getIPTimeStampRandom();
                           file = new File(savePath + name + extName);
                     } while (file.exists());
                     File saveFile = new File(savePath + name + extName);
                     try {
                           item.write(saveFile);
                     } catch (Exception e) {
                           e.printStackTrace();
                     }
                }
           }
           try {
                response.getWriter().print(name + extName);
           } catch (IOException e) {
                e.printStackTrace();
           }
           
     }
     /**上传到七牛云端
      * @param request
      * @param response
      */
     @RequestMapping("testQiNiu.do")
     public void testQN(HttpServletRequest request,HttpServletResponse response){
           List<FileItem> fileList = null;
           try {
                DiskFileItemFactory fac = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(fac);
                fileList = upload.parseRequest(request);
           } catch (FileUploadException ex) {
                return;
           }
           Iterator<FileItem> it = fileList.iterator();
           try {
                while (it.hasNext()) {
                     FileItem item = it.next();
                           Response res = uploadManager.put(item.getInputStream(), key, getUpToken(),null, "application/zip");
                System.out.println(res.getInfo());
                }
           } catch (Exception e) {
                e.printStackTrace();
           }
     }
     
       //简单上传,使用默认策略,只需要设置上传的空间名就可以了
       public String getUpToken(){
           return auth.uploadToken(bucketname);
       }
}

demo已上传至GitHub,地址如下:
https://github.com/18394093929/QiNiuBatchFileUpload

原创粉丝点击