七牛
配置ACCESS_KEY和SECRET_KEY
Qiniu.Conf.Config.ACCESS_KEY = "ACCESS_KEY";
Qiniu.Conf.Config.SECRET_KEY = "SECRET_KEY";
Plupload&七牛
這個簡單,因為七牛的JS SDK就是使用了Plupload 點擊查看官方文檔
七牛強烈建議去我們自己的服務器獲取token,這里我們使用C# SDK里的教程
編寫獲取Token的方法
/// <summary>
/// 獲取token
/// <param name="bucket">空間名</param>
/// </summary>
public string GetUpToken(string bucket)
{
//普通上傳,只需要設置上傳的空間名就可以了,第二個參數可以設定token過期時間
var putPolicy = new PutPolicy(bucket);
//調用Token()方法生成上傳的Token
var upToken = putPolicy.Token();
return upToken;
}
UEditor&七牛
使用UEditor是可以實現客戶端直傳到七牛的,使用JS SDK重寫UEditor的所有上傳按鈕(參考UEditor官方文檔)。
但是太麻煩了,成本太高,我的項目的瓶頸是在下載而不是在上傳,所以我沒有實現UEditor直傳文件到七牛,而是使用服務器中轉文件流到七牛。
直接上代碼:
編寫上傳方法
/// <summary>
/// 上傳
/// </summary>
/// <param name="bucket">空間名</param>
/// <param name="contentStream">流</param>
/// <param name="key">文件名</param>
/// <returns></returns>
public bool Upload(string bucket, Stream contentStream, string key)
{
var target = new IOClient();
var extra = new PutExtra();
var putPolicy = new PutPolicy(bucket, 3600);
var upToken = putPolicy.Token();
var ret = target.Put(upToken, key, contentStream, extra);
return ret.OK;
}
修改UEditor的UploadHandler.cs
在UploadHandler.cs找到以下代碼
var savePath = PathFormatter.Format(uploadFileName, UploadConfig.PathFormat);
並在該行下方添加以下代碼
try
{
var key = savePath;//這里使用了UEditor生成的文件名(帶路徑,可以在ueditor\net\config.json中自定義),也可以自己使用代碼生成
using (var memoryStream = new MemoryStream(uploadFileBytes))
{
//1.可以實現你項目本身的一些業務,比如將文件信息存入一個單獨的附件表
//2.調用上面的Upload方法
var bucket = "{你七牛上的空間名稱}";
****.Upload(bucket, memoryStream,key);
}
var bucketDomainUrl = "{您七牛上的空間對應的域名,用於下載}";
Result.Url = bucketDomainUrl + savePath;
Result.State = UploadState.Success;
}
catch (Exception e)
{
Result.State = UploadState.FileAccessError;
Result.ErrorMessage = e.Message;
}
具體代碼的細節和架構相關,可參考自己的項目而定,本人使用ABP(ASP.NET Boilerplate),可輕松實現領域服務和應用服務的注入。