概述:
在实际项目开发中,通常都需要将上传的文件保存其链接到数据库,然后再通过数据库存储的链接来对数据进行显示,查看,下载,播放等等操作;那么如何来获取上传后的文件的资源链接?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