概述:

在实际项目开发中,通常都需要将上传的文件保存其链接到数据库,然后再通过数据库存储的链接来对数据进行显示,查看,下载,播放等等操作;那么如何来获取上传后的文件的资源链接?OK,我们可以通过回调来解决。

思路:

  • 将存储空间绑定一个CDN加速域名
  • 指定回调的URL和返回数据字段
  • 通过域名拼接文件名访问资源,或者针对返回数据,做其他相关操作(根据实际需求)

示例:

1.空间绑定CDN加速域名:

首先创建cdn加速域名,然后选中需要绑定cdn加速域名的空间,在“加速域名”中填写创建好的cdn加速域名,最后点击创建按钮即可,如图所示:
这里写图片描述

因为我已经有了,所以上图只是为了演示,最终结果如下:
这里写图片描述

2.在程序中指定回调的URL和返回数据字段:

这两个需要在程序获取uptoken时,通过参数(StringMap)的形式进行设置,完整程序如下:

package com.qiniu.kodo;

import com.qiniu.base.AccountMgr;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;


/**
 * 上传并回调
 * @author xuhuanchao
 *
 */
public class UploadCallback {

    //创建Auth对象
    Auth auth = Auth.create(AccountMgr.ACCESS_KEY, AccountMgr.SECRET_KEY);
    UploadManager uploadManager = new UploadManager();

    /**
     * 获取凭证
     * @param bucketName 空间名称
     * @return
     */
    public String getUpToken(String bucketName) {
        return auth.uploadToken(bucketName, null, 3600, new StringMap()
                .put("callbackUrl", "http://c0d85f2b.ngrok.io/QiniuApi/callback")
                .put("callbackBody", "fileName=$(fname)&fileSize=$(fsize)&bucketName=$(bucket)"));
    }

    /**
     * 上传并回调
     * @param filePath
     * @param bucketName
     * @param key
     */
    public void upload(String filePath, String bucketName, String key) {
        try {
            Response response = uploadManager.put(filePath, key, getUpToken(bucketName));
            System.out.println(response.toString());
        } catch (QiniuException e) {
//          e.printStackTrace();
            Response r = e.response;
            // 请求失败时打印的异常的信息
            System.out.println(r.toString());
        }
    }


    /**
     * 主函数:测试
     * @param args
     */
    public static void main(String[] args) {
        String filePath = "/Users/xuhuanchao/documents/qiniu_frame.jpg";
        String bucketName = "testspace";
        String key = "qiniu_frame.jpg";
        new UploadCallback().upload(filePath, bucketName, key);
    }
}

然后,需要回调接收的服务端处理程序,我通过一个Servlet来实现,上面的程序运行后的结果如下:
这里写图片描述

在Console中输出了回调返回的数据字段:空间名、文件名、文件大小,当然还可以获取跟过其他的一些字段;

3.在浏览器地址栏,通过绑定的CDN加速域名,拼接上文件名,即可访问刚上传的资源,如图所示:
这里写图片描述

说明:

大家可能对程序中,指定的callbackURL的配置有疑问,其实这个是通过ngrok工具来实现的;针对ngrok工具,在博文“使用ngrok将本地Web服务映射到外网”有使用说明的讲解;如图:
这里写图片描述
即:将本地的web服务localhost:8080,映射到外网地址http://c0d85f2b.ngrok.io/QiniuApi/callback

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐