七牛是专注文件存储的第三方服务商,服务较好。自己最近做到服务器存储图片的时候就想到用七牛来做,将图片或者文件存放在七牛,然后自己服务器只存放资源存放在七牛文件的url。

今天主要分享两个内容:凭证的获取,安卓上传文件

在做之前还是先把官方文档好好读几遍比较好

首先说说凭证,七牛对所有上传的资源都需要身份验证,就是通过凭证来验证,验证通

过,那么就可以成功上传文件,不通过,七牛服务器会反馈一个上传失败的原因。

凭证相关概念

凭证一般不由客户端颁发,而是由业务服务器产生,分发给客户端,起到安全的保护机

制。具体可以参考七牛的编程模型

编程模型

构造上传凭证需要先构造出上传策略,上传策略是资源上传时附带的一组配置设定。通

过这组配置信息,七牛云存储可以了解用户上传的需求:它将上传什么资源,上传到哪

个空间,上传结果是回调通知还是使用重定向跳转,是否需要设置反馈信息的内容,以

及授权上传的截止时间等等。

在上传策略里可以指定上传完成后的动作,比如是给web客户端一个请求重定向

returnurl并附带retunbody,还是在客户端上传完后七牛给业务服务器一个回调,在

callbackurl可以指定回掉的url,在callbackbody可以指定回掉给业务服务器的内容。服

务器收到回调后还要给七牛一个回调,回调必须设置为json格式,七牛会直接把这个回

调发给客户端。

构造上传凭证的上传策略

接下来就可以构造上传凭证了,在这儿因为上传凭证是应该在服务器产生的,所以这儿

参考java(服务器)sdk开发文档

java服务器SDK开发指南文档

在文档里详细介绍如何生成token(凭证),其中生成凭证有几个参数必填,第一个

bucket,即自己创建的上传空间,第二个指定上传资源的名字,必须要唯一化,如果这

里指定了key,那么在客户端比如安卓上传时候也要指明同一个key,否则上传失败,当

然如果需要上传多张图片时候,那么最好在生成token的时候不指定key,那么在安卓端

(客户端)上传时候是可以指定key的(即生成token时候不指定key,在安卓端上传时

候可以指定),这时候指定了key,这个key就是上传的文件的名称,最好不要用中文命

名。

生成好token后就可以用token去上传数据了,这里采用的是安卓端,网页也试过,差不

安卓上传没什么难度,参考安卓上传SDK开发文档

<span style="font-family:KaiTi_GB2312;"><span style="font-size:24px;">// 重用 uploadManager。一般地,只需要创建一个 uploadManager 对象
UploadManager uploadManager = new UploadManager();
data = <File对象、或 文件路径、或 字节数组>
String key = <指定七牛服务上的文件名,或 null>;
String token = <从服务端SDK获取>;
uploadManager.put(data, key, token,
new UpCompletionHandler() {@Overridepublic void complete(String key, ResponseInfo info, JSONObject res) {//  res 包含hash、key等信息,具体字段取决于上传策略的设置。 Log.i("qiniu", key + ",\r\n " + info + ",\r\n " + res);}
}, null);</span></span>

其中key指定上传文件的名称,第三个参数为七牛反馈的回调,在jsonobject里面反馈的

数据都是在上传策略里面指定的类型。其他的断点上传,分片上传,上传进度获取在开

发文档都有了。

最后总结一些问题:

在token里指定key,那么上传文件时也要指定相同的key,否则上传失败。如果在token

里可以不指定key,在上传时指定也没事,key即为bucket保存的文件名。

关于七牛包的依赖问题也是比较麻烦,安卓端注意sdk版本依赖问题。可以参考另一篇

博文:七牛关于sdk的依赖包问题

在上传数据失败,各种状态码解决方案请参考:七牛错误状态码解析

关于七牛回调请参考:七牛回调理解

具体 以后有什么使用感悟再更新,有什么问题欢迎指正,谢谢!

给出生成token的代码(java版本)

</pre><pre name="code" class="java">package test;import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;public class TestQiniu {public static void main(String[] args) {String uptoken = getUptoken();System.out.println(uptoken);}private static String getUptoken() {Auth auth = Auth.create("AK","SK");String uptoken = auth.uploadToken("agriculturetest",null,3600,new StringMap().putNotEmpty("returnBody","{\"key\": $(key), \"imageAve\": $(imageAve), \"width\": $(imageInfo.width), \"height\": $(imageInfo.height)}"));return uptoken;}}

安卓端上传文件代码

package com.example.testqiniutoken;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;import org.json.JSONObject;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;import com.qiniu.android.http.ResponseInfo;
import com.qiniu.android.storage.UpCompletionHandler;
import com.qiniu.android.storage.UploadManager;public class MainActivity extends Activity implements OnClickListener {private Button button;private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.button1);button.setOnClickListener(this);}public byte[] getBytes(InputStream is)  {ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] b = new byte[2048];int len;try {while ((len = is.read(b, 0, 2048)) != -1) {baos.write(b, 0, len);}} catch (IOException e) {e.printStackTrace();}try {baos.flush();} catch (IOException e) {e.printStackTrace();}return baos.toByteArray();}@Overridepublic void onClick(View v) {try {InputStream is = getResources().getAssets().open("146459-105.jpg");byte[] bytes = getBytes(is);UploadManager uploadManager = new UploadManager();//第二个参数就是指定在bucket里面存储文件的名字,唯一性uploadManager.put(bytes,"meinv","8EqgYr4A18xyeUzWdDHt6OKTKJ5wW9mttLKiobF_:vMN2oe1OFKTkBHPv0TplIfTBjyw=:eyJzY29wZSI6ImFncmljdWx0dXJldGVzdCIsInJldHVybkJvZHkiOiJ7XCJrZXlcIjogJChrZXkpLCBcImltYWdlQXZlXCI6ICQoaW1hZ2VBdmUpLCBcIndpZHRoXCI6ICQoaW1hZ2VJbmZvLndpZHRoKSwgXCJoZWlnaHRcIjogJChpbWFnZUluZm8uaGVpZ2h0KX0iLCJkZWFkbGluZSI6MTQ1MjkzMzUxOX0=",new UpCompletionHandler() {@Overridepublic void complete(String key,ResponseInfo info, JSONObject response) {Log.e(TAG, key);Log.e(TAG, info.toString());Log.e(TAG, "上传是否成功"+info.isOK());//上传失败的话response是null !!!!!!if (response!=null) {Log.e(TAG, response.toString());}}}, null);} catch (Exception e) {e.printStackTrace();}}}

七牛云存储的简单使用总结相关推荐

  1. ueditor与七牛云存储结合

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:  ueditor与七牛云存储结合,主要是表单api. ueditor上传图片到七牛云存储 ueditor结合七牛传图片 ...

  2. python如何使用sdk_七牛云存储Python SDK使用教程 - 基本介绍

    本教程旨在介绍如何使用七牛的Python SDK来快速地进行文件上传,下载,处理,管理等工作. 安装 首先,要使用Python的SDK必须要先安装.七牛的Python SDK是开源的,托管在Githu ...

  3. 添加七牛云存储_七牛云存储如何正确设置流量带宽告警配置(阈值告警)?

    经常有人说使用七牛云如果不正确设置流量带宽告警配置(也就是阀值告警)的话,很可能一觉起来房子就是人家的了,所以昨晚特意去七牛云存储设置一个流量阀值,我也担心第二天起来房子就是别人的了.下面跟大家简单介 ...

  4. python教程七牛云_通过Python来使用七牛云存储的方法详解

    本教程旨在介绍如何使用七牛的Python SDK来快速地进行文件上传,下载,处理,管理等工作. 安装 首先,要使用Python的SDK必须要先安装.七牛的Python SDK是开源的,托管在Githu ...

  5. 七牛云存储,图片储存

    七牛云存储,图片储存 概述 七牛云对象存储服务提供高可靠.强安全.低成本.可扩展的非结构化数据的存储服务.它提供简单的 Web  服务接口,可以通过七牛开发者平台或客户端存储和检索任意数量的数据,支持 ...

  6. 使用七牛云存储解决ios7.1的app部署问题 https

    2019独角兽企业重金招聘Python工程师标准>>> 使用七牛云存储解决ios7.1的app部署问题 一.问题描述 开发完iOS版本的app.需要将.ipa文件和.plist文件打 ...

  7. 使用七牛云存储解决ios7.1的app部署问题

    使用七牛云存储解决ios7.1的app部署问题 一.问题描述 开发完ios版本的app.需要将.ipa文件和.plist文件打包上传,供用户下载,在线安装.用户安装过程简单描述如下: 首先通过手机浏览 ...

  8. 使用七牛云存储解决app部署问题,免申请https认证

    一.问题描述 开发完ios版本的app.需要将.ipa文件和.plist文件打包上传,供用户下载,在线安装.用户安装过程简单描述如下: 首先通过手机浏览器safari或者扫描二维码获取到下载.plis ...

  9. 七牛云存储详细配置步骤

    七牛云存储详细配置步骤 七牛云有免费的10G存储空间和流量,非常适合初创期的个人站长使用.初次使用看到那么多配置不知该如何下手,虽然官方也有详细的说明文档,但都是单独介绍,一半让人难以读懂.本人也是研 ...

最新文章

  1. 年中盘点:2021年最炙手可热的10家AI初创公司
  2. str_pad函数php,str_pad
  3. java中判断数组中元素出现的次数
  4. java 替换多个字符串_Java一次(或以最有效的方式)替换字符串中的多个不同子字符串...
  5. C#LeetCode刷题之#206-反转链表(Reverse Linked List)
  6. 算法大赛十强战队解题方案大公开!【附PPT下载】
  7. 在使用Navicat for MySQL 出现 异常“You have an error in your SQL syntax......“
  8. 打不开网页但QQ能上网的解决办法
  9. VS真难用:好好的编译工程,换个机器完全不能编译;换高版本还是不能编译
  10. Cplex20.1版本bin包Linux安装过程
  11. sqlplus基本使用
  12. python蜂鸣器天空之城频率_蜂鸣器版天空之城
  13. 轻松访问Google Chrome浏览器中的浏览历史记录
  14. linux下WMB通过ODBC连接数据库
  15. 为知笔记登录提示“打开数据库失败”解决方法
  16. [易飞]一张领料单单身仓库飞了引起的思考
  17. 女程序员在互联网界到底有没有被歧视?
  18. 学习Python人工智能前景如何
  19. 神仙科研夫妇!浙大博士夫妻赴耶鲁深造,如今归国任教985
  20. C++ Opencv 实现Canny算法

热门文章

  1. 从公司管理到IT审计
  2. 通熟理解urL和urI的区别
  3. 【干货分享】学生党必备脑图软件
  4. 鼠标连点器烦人弹窗?我直接爆破
  5. 银联宣布:无卡时代来了!有何神奇之处
  6. 2021-12-11 WPF上位机 110-欧姆龙串口转网口的封装
  7. 政考网:省考上岸,2021国考有希望吗?
  8. java数据结构停车场管理系统_《数据结构》实验设计报告-停车场管理系统
  9. IOS客户端app在线安装ipa包,
  10. 安装videosrt(视频字幕提取软件)