七牛上传文件(JS实现)

写在前面: 本人是个新人,很多说法或者写法不正确不严谨,请见谅!
未写前的迷茫: 在七牛官网实例中可以很正常的使用上传功能,但是将文件以及资源下载到本地就不能上传了,报“格式错误”、“媒体类型错误”等,也不知道是什么原因导致的。后来看了uptoken比较重要,自认为是那里的原因,但是具体是怎么回事还没弄明白。后经过师父指点,需要服务器提供uptoken,加之在七牛文档中心查阅了相关的上传设置,才知道uptoken是业务服务器返回到客户端以供上传文件到七牛的上传凭证。uptoken主要是通过七牛SDK构造。并且也学习到uptoken的构造需要由AccessKey、SecretKey、bucketName,而且这些是需要自己在官网去注册申请,在之前这些都不知道,导致没办法进行下去。

七牛上传简介:官方文档地址:http://developer.qiniu.com/docs/v6/sdk/javascript-sdk.html

功能包括:

上传
  • html5模式大于4M时可分块上传,小于4M时直传
  • Flash、html4模式直接上传
  • 继承了Plupload的功能,可筛选文件上传、拖曳上传等
  • 下载(公开资源)
数据处理(图片)
  • imageView2(缩略图)
  • imageMogr2(高级处理,包含缩放、裁剪、旋转等)
  • imageInfo (获取基本信息)
  • exif (获取图片EXIF信息)
  • watermark (文字、图片水印)
  • pipeline (管道,可对imageView2、imageMogr2、watermark进行链式处理)

业务流程:

一般  客户端(终端用户) => 业务服务器 => 云存储服务

缺点:

  1. 多了一次中转的上传过程,同数据存放在用户的业务服务器中相比,会相对慢一些;
  2. 增加了用户业务服务器的负载,消耗了带宽,占用了磁盘,降低了服务能力;
  3. 增加了用户的流量消耗,来自终端用户的上传数据进入业务服务器,然后再次上传至云存储服务,净增一倍流量。

更改  客户端(终端用户) => 七牛 => 业务服务器
优点:
客户端(终端用户)直接上传到七牛的服务器。通过DNS智能解析,七牛会选择到离终端用户最近的ISP服务商节点,速度会相比数据存放在用户自己的业务服务器上的方式更快。而且,七牛云存储可以在用户文件上传成功以后,替用户的客户端向用户的业务服务器发送反馈信息,减少用户的客户端同业务服务器之间的交互。

实现步骤:
1 环境准备
添加maven依赖
        
        
            com.qiniu
            sdk
            6.1.7
        
        

2 初始化

要接入七牛云存储,您需要拥有一对有效的 Access Key 和 Secret Key 用来进行签名认证。

2.1注册七牛开发者账号,查看AccessKey和SecretKey


2.2 新建一个空间,取一个自己空间的名称niu8


2.3在controller中添加一个方法用来生成uptoken,uptoken可简单理解为七牛上传的凭证,JS在设置的时候需要这个。

    @RequestMapping(value = "uptoken", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity makeToken() {
        //todo
        // 需要修改AK、SK、bucketName
        Config.ACCESS_KEY = "FhR6piyeRd07vhonfdIePWPgeIrTXmOXyeZx8gKm";
        Config.SECRET_KEY = "goerw3ZniGNmrpVbUuyhI_-u2VFEzUKYY6OZ5lRj";
        Mac mac = new Mac(Config.ACCESS_KEY, Config.SECRET_KEY);
        String bucketName = "niu8";
        PutPolicy putPolicy = new PutPolicy(bucketName);
        try {
            String uptoken = putPolicy.token(mac);
            JSONObject jsonObject=new JSONObject();
            jsonObject.put("uptoken",uptoken);
            return new ResponseEntity(jsonObject, HttpStatus.OK);
        } catch (AuthException e) {
            e.printStackTrace();
            return new ResponseEntity(null, HttpStatus.BAD_REQUEST);
        } catch (JSONException e) {
            e.printStackTrace();
            return new ResponseEntity(null, HttpStatus.BAD_REQUEST);
        }
    } 
  说明: 
  

  1. 这里的controller的请求映射为/container,请求的方法的映射为uptoken,因此页面请求的路径为$(ctx)/container/uptoken
    @RequestMapping(value = "/container")
  2. 代码里面主要设置AK、SK、bucketName,然后通过七牛SDK API构造一个uptoken,并将其封装为JSON格式。

3 导入七牛JS上传例子需要的css和js







4 页面主要代码

		<%--start新增七牛上传--%>
                    
<%--end--%>


4 修改页面代码的两个value值,第一个是新建空间的域名,第二个就是刚刚新建的controller,用于获取uptoken,这里主要是赋值给main.js中的
domain:$("#domain").val();

uptoken$("#uptoken").val();


5 其他文件可以不做修改。

6 实现效果


7总结
 可以上传100M以内的文件,文件上限是自己设定的,分块大小也是自己设定的。支持断点续传等,图片文件支持缩略图,支持上传完成添加水印,改变角度等。本文主要是为了记录,可能很多不对或者不科学的说法,请大婶们见谅!

你可能感兴趣的:(MAVEN,云存储)