第一步:申请账号
去七牛云存储上申请账号,然后上传身份证验证,待身份验证通过。
第二步:进入“管理控制台”创建存储空间
点击“管理控制台”-->“对象存储” 点击“创建存储空间”(Bucket ) 存储空间名称 我们可以根据规则来自定义,然后选择存储区域,这个存储区域一般是选择离我们服务器部署最近的区域,比如我的服务器部署在深圳,那么我就选择“华南” 访问控制我就根据我的实际情况选择了“公开空间”
创建好存储空间后我们就可以将文件上传到我们定义的存储空间来了,比如我这里新建了一个fanbin的存储空间,稍后我们将通过代码将一个图片上传到这个fanbin的存储空间下面
第三步:进入“个人面板”-->“个人中心”-->“秘钥管理”获取秘钥
我们会看一个“秘钥管理”,我们可以通过秘钥作为身份标识将我们要上传的文件上传到我们的云存储空间中
第四步:在项目中使用
首先需要在你的项目中安装Qiniu包
我们可以借助Nuget工具 或者直接在控制台执行:Install-Package Qiniu
因为它依赖Newtonsoft.Json.dll,所以我们还要在控制台执行:Install-Package Newtonsoft.Json
这里我是通过Nuget工具安装的,安装版本是7.3.0.0版本(目前是最新版本:2018-4-10)
using Qiniu.Http;
using Qiniu.Storage;
using Qiniu.Util;
using System;
namespace YunUpload
{
class Program
{
/// <summary>
/// 这是一个将图片上传到七牛云云存储上的案例
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
// 生成(上传)凭证时需要使用此Mac
// 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey
// 实际应用中,请自行设置您的AccessKey和SecretKey
Mac mac = new Mac(Settings.AccessKey, Settings.SecretKey);
string bucket = "fanbin"; //这个是我们在七牛云上创建的“存储空间”名称
string saveKey = "abc/2.png"; //这个abc 相当于一个文件夹,是我们只设定的。2.png是我们上传文件的文件名,上传成功后通过它来读
string localFile = "D:\\2.png"; //文件路径
PutPolicy putPolicy = new PutPolicy();
// 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY"
// putPolicy.Scope = bucket + ":" + saveKey;
putPolicy.Scope = bucket;
// 上传策略有效期(对应于生成的凭证的有效期)
putPolicy.SetExpires(3600);
// 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除
putPolicy.DeleteAfterDays = 1;
// 生成上传凭证
string jstr = putPolicy.ToJsonString();
string token = Auth.CreateUploadToken(mac, jstr);
//Config配置类中可以配置区域,比如在我在七牛云上创建的fanin这个存储空间的区域选择的是“华南”这里就将它设为Zone=Zone.ZONE_CN_South
//UseHttps表示:是否采用https域名
//UseCdnDomains表示:上传是否使用CDN上传加速
//MaxRetryTimes表示:重试请求次数
UploadManager um = new UploadManager(new Config() { Zone = Zone.ZONE_CN_South, UseHttps = true, UseCdnDomains = true, MaxRetryTimes = 3 });
HttpResult result = um.UploadFile(localFile, saveKey, token, new PutExtra());
Console.WriteLine(result);
Console.ReadKey();
}
}
class Settings
{
public static string AccessKey { get; set; } = "-PUFEVY1T2R26fqnlt-_F1AtneQe9lQd1RwWs_e2";
public static string SecretKey { get; set; } = "IUgR_r_yjRjM-m7jTn8YqTuHYsbmw_OgkEtQfbfs";
}
}
经过测试:图片上传成功
第五步:文件上传后的读取
进入“管理控制台”-->“对象存储” 我们发现有一个测试域名,通过这个测试域名就可以访问我们刚刚上传的文件(当然这个测试域名是可以换的,我们可以绑定我自己的域名,目前我就使用七牛云自动分配给我的测试域名来读取我们刚刚上传的文件)比如我刚刚上传的文件保存的路径是 abc/2.png
我们复制这个域名,在域名前面加上https就可以访问了。如下:
https://p6wx9qa2q.bkt.clouddn.com/abc/2.png
至于在域名前面加http还是https 这个要看你的配置。比如在Config配置中,我们配置了UseHttps = true 那么就可以加https 否则加http就可以啦
参考附件:Config类中各个字段的意思注解
namespace Qiniu.Storage
{
/// <summary>
/// 配置信息,主要包括Zone配置(另请参阅Zone模块)
/// 目前已支持的机房包括:
/// 华东(CN_East), 华北(CN_North), 华南(CN_South), 北美(US_North)
/// 默认设置为华东机房(CN_East)
/// </summary>
public class Config
{
/// <summary>
/// 默认高级资源管理域名
/// </summary>
public static string DefaultRsHost = "rs.qiniu.com";
/// <summary>
/// 默认数据处理域名
/// </summary>
public static string DefaultApiHost = "api.qiniu.com";
/// <summary>
/// 空间所在的区域(Zone)
/// </summary>
public Zone Zone = null;
/// <summary>
/// 是否采用https域名
/// </summary>
public bool UseHttps = false;
/// <summary>
/// 是否采用CDN加速域名,对上传有效
/// </summary>
public bool UseCdnDomains = false;
/// <summary>
/// 分片上传时,片的大小,默认为4MB,以提高上传效率
/// </summary>
public ChunkUnit ChunkSize = ChunkUnit.U4096K;
/// <summary>
/// 分片上传的阈值,超过该大小采用分片上传的方式
/// </summary>
public int PutThreshold =ResumeChunk.GetChunkSize(ChunkUnit.U1024K) * 10;
/// <summary>
/// 重试请求次数
/// </summary>
public int MaxRetryTimes = 3;
/// <summary>
/// 获取资源管理域名
/// </summary>
/// <param name="ak"></param>
/// <param name="bucket"></param>
/// <returns></returns>
public string RsHost(string ak, string bucket)
{
string scheme = UseHttps ? "https://" : "http://";
Zone z = this.Zone;
if (z == null)
{
z = ZoneHelper.QueryZone(ak, bucket);
}
return string.Format("{0}{1}", scheme, z.RsHost);
}
/// <summary>
/// 获取资源列表域名
/// </summary>
/// <param name="ak"></param>
/// <param name="bucket"></param>
/// <returns></returns>
public string RsfHost(string ak, string bucket)
{
string scheme = UseHttps ? "https://" : "http://";
Zone z = this.Zone;
if (z == null)
{
z = ZoneHelper.QueryZone(ak, bucket);
}
return string.Format("{0}{1}", scheme, z.RsfHost);
}
/// <summary>
/// 获取数据处理域名
/// </summary>
/// <param name="ak"></param>
/// <param name="bucket"></param>
/// <returns></returns>
public string ApiHost(string ak, string bucket)
{
string scheme = UseHttps ? "https://" : "http://";
Zone z = this.Zone;
if (z == null)
{
z = ZoneHelper.QueryZone(ak, bucket);
}
return string.Format("{0}{1}", scheme, z.ApiHost);
}
/// <summary>
/// 获取资源抓取更新域名
/// </summary>
/// <param name="ak"></param>
/// <param name="bucket"></param>
/// <returns></returns>
public string IovipHost(string ak, string bucket)
{
string scheme = UseHttps ? "https://" : "http://";
Zone z = this.Zone;
if (z == null)
{
z = ZoneHelper.QueryZone(ak, bucket);
}
return string.Format("{0}{1}", scheme, z.IovipHost);
}
/// <summary>
/// 获取文件上传域名
/// </summary>
/// <param name="ak"></param>
/// <param name="bucket"></param>
/// <returns></returns>
public string UpHost(string ak, string bucket)
{
string scheme = UseHttps ? "https://" : "http://";
Zone z = this.Zone;
if (z == null)
{
z = ZoneHelper.QueryZone(ak, bucket);
}
string upHost = z.SrcUpHosts[0];
if (this.UseCdnDomains)
{
upHost = z.CdnUpHosts[0];
}
return string.Format("{0}{1}", scheme, upHost);
}
}
}