对接七牛C#SDk v7.2.15-ext-json
sdk下载路径: https://github.com/qiniu/csharp-sdk/releases ,使用压缩包里的net2.0 dll文件
具体代码参照下面
using LitJson;
using Qiniu.Common;
using Qiniu.Http;
using Qiniu.IO;
using Qiniu.IO.Model;
using Qiniu.JSON;
using Qiniu.Util;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AnotherJsonSerializer : IJsonSerializer {
// 实现此接口的JSON序列化方法
public string Serialize<T>(T obj) where T : new() {
return JsonMapper.ToJson(obj);
}
}
public class AnotherJsonDeserializer : IJsonDeserializer {
// 实现此接口的JSON反序列化方法
public bool Deserialize<T>(string str, out T obj) where T : new() {
obj = default(T);
bool ok = true;
try {
obj = JsonMapper.ToObject<T>(str);
} catch (System.Exception) {
ok = false;
}
return ok;
}
}
public class QiniuMgr {
public static QiniuMgr m_Instance;
const string AK = "xxx";
const string SK = "xxx";
const string Bucket = "库名";
public static QiniuMgr Instance {
get {
if (m_Instance == null) {
m_Instance = new QiniuMgr();
}
return m_Instance;
}
}
private QiniuMgr() {
JsonHelper.JsonSerializer = new AnotherJsonSerializer();
JsonHelper.JsonDeserializer = new AnotherJsonDeserializer();
// 设置为华南区
ZoneID zoneId = ZoneID.CN_South;
Config.SetZone(zoneId, false);
}
/// <summary>
/// 简单上传-上传字节数据
/// </summary>
public void UploadData(byte[] data, string fileName) {
// 生成(上传)凭证时需要使用此Mac
Mac mac = new Mac(AK, SK);
// 上传策略,参见
// https://developer.qiniu.com/kodo/manual/put-policy
PutPolicy putPolicy = new PutPolicy();
// 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY"
putPolicy.Scope = Bucket + ":" + fileName;
//putPolicy.Scope = Bucket;
// 上传策略有效期(对应于生成的凭证的有效期)
putPolicy.SetExpires(3600);
// 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除
putPolicy.DeleteAfterDays = 1;
// 生成上传凭证,参见
// https://developer.qiniu.com/kodo/manual/upload-token
string jstr = putPolicy.ToJsonString();
string token = Auth.CreateUploadToken(mac, jstr);
FormUploader fu = new FormUploader();
HttpResult result = fu.UploadData(data, fileName, token);
Debug.Log(result);
}
}
生成二维码的方法如下
/// <summary>
/// 用草料生成二维码
/// </summary>
/// <param name="content">扫码二维码后显示的内容</param>
/// <returns></returns>
IEnumerator SpawnQRCode(string content) {
WWW www = new WWW(string.Format("https://cli.im/api/qrcode/code?text={0}&mhid=", content));
yield return www;
string errorMsg = string.Empty;
if (string.IsNullOrEmpty(www.error)) {
//Debug.Log(www.text);
//获取二维码路径
string s = www.text.Substring(www.text.IndexOf("<img src=") + 12, www.text.Length - (www.text.IndexOf("<img src=") + 12));
string result = "http://" + s.Substring(0, s.IndexOf("\""));
www = new WWW(result);
yield return www;
if (string.IsNullOrEmpty(www.error)) {
m_ImgQRCode.gameObject.SetActive(true);
m_ImgQRCode.texture = www.texture;
} else {
Debug.Log(www.error);
}
} else {
Debug.Log(www.error);
}
}
其他主要代码
// 截图
Texture2D screenShot = CaptureScreen(m_Camera, new Rect(134, 109, 1646, 947));
byte[] bytes = screenShot.EncodeToJPG();
// 用时间戳生成文件名,防止cdn缓存
string fileName = "GraphChart" + GetTimeStamp() + ".jpg";
// 把图片上传到七牛存储
QiniuMgr.Instance.UploadData(bytes, fileName);
// 获取二维码 -WarterMaker 是七牛配置的图片下载处理模板,用来个图片加水印还是挺方便的,
// 不过只要去掉-WarterMaker就会没水印了,不是很安全
StartCoroutine(SpawnQRCode("//七牛配置的cdn域名.shenlinjoy.com/" + fileName + "-WarterMaker"));