移动应用图片的福音--七牛云存储

简介:   本篇来介绍移动应用图片存储的第三方,官方网址:http://www.qiniu.com/   首先,在七牛上要注册开发者账号,需要认证身份证信息。认证完之后,我们来开始进行安卓端的开发。 一、准备信息   进行图片的上传与下载,我们需要准备几个信息,首先是空间名,然后是域名,再者是密钥对。

  本篇来介绍移动应用图片存储的第三方,官方网址:http://www.qiniu.com/

  首先,在七牛上要注册开发者账号,需要认证身份证信息。认证完之后,我们来开始进行安卓端的开发。

一、准备信息

  进行图片的上传与下载,我们需要准备几个信息,首先是空间名,然后是域名,再者是密钥对。如下图:

二、安卓端图片上传

  首先我们需要导入JAR包,网址:http://developer.qiniu.com/docs/v6/sdk/android-sdk.html

  现在来编写上传相关的程序:

 private volatile boolean isCancelled = false;// 取消标志    
   static String AccessKey =七牛上的公钥; static String SecretKey =七牛上的私钥; UploadManager uploadManager; /** *uploadManager有两种初始化方法,一种是默认配置,一种的自动逸配置 */ // 默认配置      uploadManager=new UploadManager(); //自定义配置 Configuration config= new Configuration.Builder().chunkSize(256 * 1024) // 分片上传时,每片的大小。 // 默认 // 256K .putThreshhold(512 * 1024) // 启用分片上传阀值。默认 512K .connectTimeout(10) // 链接超时。默认 10秒 .responseTimeout(60) // 服务器响应超时。默认 60秒 // .recorder(recorder) // recorder 分片上传时,已上传片记录器。默认 null // .recorder(recorder, keyGen) // keyGen // 分片上传时,生成标识符,用于片记录器区分是那个文件的上传记录 .build(); // 重用 uploadManager。一般地,只需要创建一个 uploadManager 对象 uploadManager = new UploadManager(config);

  初始化配置搞定了,下面来进行上传操作:

     String _uploadToken = getUploadToken(scope);
     uploadManager.put(SAVE_FILE_DIRECTORY,
// 本地上传路径、文件、字符串 key, // 网站上的名字 _uploadToken, // 验证信息 new UpCompletionHandler() { @Override public void complete(String key, ResponseInfo info, JSONObject response) { Log.e("qiniu", info.toString()); Log.i("是否成功", String.valueOf(info.isOK())); } }, new UploadOptions(null, // 自定义变量,key必须以 x: 开始。 "webp", // 指定文件的mimeType。 false, // 是否验证上传文件。 new UpProgressHandler() { // 上传进度回调。 public void progress(String key, double percent) { Log.i("qiniu", key + ": " + percent); } }, new UpCancellationSignal() { // 取消上传,当isCancelled()返回true时,不再执行更多上传。 public boolean isCancelled() { return isCancelled; } }) );

  在上传的操作中唯一需要我们头疼的就是_uploadToken,下面来介绍如何生成一个_uploadToken令牌信息:

    public String getUploadToken(String scope) {
        // 构造上传策略
        JSONObject json = new JSONObject();
        long dataline = System.currentTimeMillis() / 1000 + 3600;
        String uploadToken = null;
        try {
            json.put("deadline", dataline);// 有效时间为一个小时
            json.put("scope", scope);// 上传空间
            String encodedPutPolicy = UrlSafeBase64.encodeToString(json.toString().getBytes());
            byte[] sign = HmacSHA1Encrypt(encodedPutPolicy, SecretKey);
            String encodedSign = UrlSafeBase64.encodeToString(sign);
            uploadToken = AccessKey + ':' + encodedSign + ':' + encodedPutPolicy;// 登录信息token=公钥:加密的json信息:原始json信息
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return uploadToken;
    }

    /////////////// ************************************/////////////////////////
    /**
     * 使用 HMAC-SHA1 签名方法对对encryptText进行签名
     * 
     * @param encryptText
     *            被签名的字符串
     * @param encryptKey
     *            密钥
     * @return
     * @throws Exception
     */
    private static final String MAC_NAME = "HmacSHA1";
    private static final String ENCODING = "UTF-8";

    private byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {
        byte[] data = encryptKey.getBytes(ENCODING);
        // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
        SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
        // 生成一个指定 Mac 算法 的 Mac 对象
        Mac mac = Mac.getInstance(MAC_NAME);
        // 用给定密钥初始化 Mac 对象
        mac.init(secretKey);
        byte[] text = encryptText.getBytes(ENCODING);
        // 完成 Mac 操作
        return mac.doFinal(text);
    }

  好了现在我们就可以成功上传了。

三、编写其他操作

  1、取消操作

    /**
     * 点击取消按钮,让 UpCancellationSignal#isCancelled() 方法返回 true ,以停止上传
     */
    public void cancell() {
        isCancelled = true;
    }

  2、删除操作

    /**
     * 删除指定空间、名称的资源
     * 
     * @param bucket 空间名
     * @param fileName 文件名
     * @return
     */
    public boolean deleteFile(String bucket, String fileName) {
        try {
            String entryUrl = bucket + ":" + fileName;
            String encodedEntryURI = UrlSafeBase64.encodeToString(entryUrl.getBytes());
            String host = "http://rs.qiniu.com";
            String path = "/delete/" + encodedEntryURI;
            String url = host + path;
            byte[] sign = HmacSHA1Encrypt(path + "\n", SecretKey);
            String encodedSign = UrlSafeBase64.encodeToString(sign);
            String authorization = AccessKey + ':' + encodedSign;
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost mothod = new HttpPost(url);
            mothod.setHeader("Content-Type", "application/x-www-form-urlencoded");
            mothod.setHeader("Authorization", "QBox " + authorization);
            // 连接超时时间
            httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 20000);
            // 读取超时时间
            httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 20000);
            HttpResponse response = httpClient.execute(mothod);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if (statusCode == HttpStatus.SC_OK) {
                Log.e("删除结果", "successful");
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.e("删除结果", "false");
        return false;
    }

  好了,暂时就先到这里,虽然进行了一些封装,但是对自己的封装不很满意所以暂时不发了,以后封装完善了再发吧,这些已经足够新手理解了。下篇介绍获取网络图片并显示。主要用到目前最好的图片加载框架ImageLoad。

遗失的拂晓
目录
相关文章
|
16天前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
68 0
先文章写在自己的富文本上,痛点,商业模式,支持文章转载,搭建工具------自媒体平台之间快速上传文章的方法,利用自己的富文本编辑器进行上传
先文章写在自己的富文本上,痛点,商业模式,支持文章转载,搭建工具------自媒体平台之间快速上传文章的方法,利用自己的富文本编辑器进行上传
|
3月前
|
人工智能 API 语音技术
MoneyPrinterPlus:AI自动短视频生成工具-微软云配置详解
详细介绍如何使用在MoneyPrinterPlus中配置使用微软云语音服务,实现AI自动短视频生成。
|
4月前
|
Web App开发 存储 JavaScript
走进Chrome拓展开发,定制自己的图床扩展
走进Chrome拓展开发,定制自己的图床扩展
|
4月前
|
编解码 算法 Python
浅析You-Get:这款视频下载工具的强势之处
浅析You-Get:这款视频下载工具的强势之处
133 0
直播网站源码社区功能部署开发:连接世界的互动形式!
直播网站源码社区功能如何去实现from flask import Flask, request app = Flask(__name__) posts = [] @app.route('/post', methods=['POST'])
直播网站源码社区功能部署开发:连接世界的互动形式!
|
小程序
微信小程序项目实例——图片处理小工具(自制低配版美图秀秀)
微信小程序项目实例——图片处理小工具(自制低配版美图秀秀)
现有的游戏娱乐直播平台源代码开发平台,二开功能省钱又省时
随着游戏娱乐行业的蓬勃发展,开发一套高效的游戏娱乐直播平台成为了许多企业和个人的目标。在这篇文章中,我们将探讨一种新的开发策略,即通过源码二次开发来省钱和省时。
|
缓存 JavaScript 安全
这个高颜值的开源第三方网易云音乐播放器你值得拥有
有没有一个既简洁纯粹,颜值又高的网易云音乐播放器呢,答案是有的,它就是:YesPlayMusic,一个开源的第三方实现。
1045 0
这个高颜值的开源第三方网易云音乐播放器你值得拥有
|
JavaScript 开发者
APICloud App开发教程之云修复功能
使用APICloud开发平台的云修复功能可以实现快速版本迭代,快速修复bug。不用发布新的apk或者ipa版本既可对你的app进行更新,即增量更新。在项目迭代过程中,如果修改了其中某几个文件,那么只需要更新这几个文件即可。
193 0
APICloud App开发教程之云修复功能