UEditor上傳圖片到七牛C#(後端實現)

因爲我的網站空間存儲有限因此選擇將圖片統一存儲到七牛上,理由很簡單html

 1  免費10G 的容量  ,對我的網站足夠用前端

 2  規範的開發者文檔 和完善的sdk(幾乎全部熱門語言sdk)java

 

總體思路

  圖片上傳七牛雲 在我看來無非兩種方式ajax

  1 前端表單或ajax異步提交請求到七牛服務器 ,固然此時也須要通過後端獲取相應的  token (圖片->七牛服務器)json

  2 直接後端代碼請求 七牛服務器 ,官方有各版本語言的sdk 提供 ,可提升開發效率 ,下降開發難度  (圖片->本身服務器->七牛服務器)後端

 

因本文介紹的是使用 ueditor 圖片上傳七牛雲 ,  因此若是使用方式1  要改的應該是 ueditor 的js  源碼文件 以及 config配置文件等信息七牛雲存儲

使用方式2 的話 須要改後臺代碼(ueditor 不一樣後臺語言都有相應的源碼,下載時候自帶)服務器

 

七牛雲存儲的簡單介紹與使用

   爲了更好的理解後面的內容  咱們先來了解一下七牛雲存儲 app

 1. 固然首先你得註冊一個七牛帳號 ,而後進入進入對象存儲,新建一個存儲空間這個就至關於在服務器上件一個文件夾,這個頗有必要後期代碼中要用到。dom

 

2 建完以後你在對應存儲空間找到內容管理的tab頁 能夠看到外鏈默認域名  個人是opvqiebq9.bkt.clouddn.com   這個就是到時候你圖片要訪問的地址好比opvqiebq9.bkt.clouddn.com/img1.jpg

 

 

 

3.  固然做爲本身的網站確定有本身的域名,怎麼會容許本身的圖片外鏈長這醜樣呢,這時只需作一個本身網站二級域名的綁定 我用的是img.siyouku.cn  

    點擊域名綁定tab頁面,這裏用普通域名就能夠

 

4 綁定好以後綁定好通常一兩小時就回生成一個要解析用的cname域名接下來還須要去你的域名提供商管理後臺 添加一個cname解析 ,點這裏教程

 

好了以上是七牛存儲空間的基本設置,此時img.siyouku.cn  就至關於你的圖片服務器了,接下來咱們要作的就是上傳圖片

 

上傳具體實現

本文使用的是上面說的第二種方式 也就是改寫ueditor後端代碼直接請求七牛服務器進行上傳,前端方式目前網上已經有一些很好的教程

能夠參考  http://www.cnblogs.com/chshapple/archive/2015/09/11/4802208.html

             https://my.oschina.net/duoduo3369/blog/174655

 

1 首先咱們要先找到七牛的C#版的SDK  ,教程很是詳細 ,讓咱們知道怎麼引用和使用基本的類庫  https://developer.qiniu.com/kodo/sdk/1237/csharp

 

2 接下來咱們定位上傳文件 ,咱們會發現有不少上傳方式這裏咱們選擇文件流上傳做爲例子,其實sdk已經幫咱們作了幾乎全部的事情 咱們只須要把這段代碼改寫到你的ueditor的上傳代碼中就ok了 ,

代碼中 重要的幾個點    1.  accesskey  和secretkey  這個是在你的七牛後臺管理中能找到,我的中心->密鑰管理

                               2. buckut    這個也就是前面建立存儲空間填寫的惟一的名稱  我這裏是    siyouku

                               3. 還有就是saveKey  這個能夠用圖片的名稱

 

 1 // 生成(上傳)憑證時須要使用此Mac
 2 // 這個示例單獨使用了一個Settings類,其中包含AccessKey和SecretKey
 3 // 實際應用中,請自行設置您的AccessKey和SecretKey
 4 Mac mac = new Mac(Settings.AccessKey, Settings.SecretKey);
 5  
 6 string bucket = "test";
 7 string saveKey = "1.jpg";
 8  
 9 // 上傳策略,參見
10 // https://developer.qiniu.com/kodo/manual/put-policy
11 PutPolicy putPolicy = new PutPolicy();
12  
13 // 若是須要設置爲"覆蓋"上傳(若是雲端已有同名文件則覆蓋),請使用 SCOPE = "BUCKET:KEY"
14 // putPolicy.Scope = bucket + ":" + saveKey;
15 putPolicy.Scope = bucket;
16  
17 // 上傳策略有效期(對應於生成的憑證的有效期)
18 putPolicy.SetExpires(3600);
19  
20 // 上傳到雲端多少天后自動刪除該文件,若是不設置(即保持默認默認)則不刪除
21 putPolicy.DeleteAfterDays = 1;
22  
23 // 生成上傳憑證,參見
24 // https://developer.qiniu.com/kodo/manual/upload-token
25  
26 string jstr = putPolicy.ToJsonString();
27 string token = Auth.CreateUploadToken(mac, jstr);
28  
29 try
30 {
31 string url = "http://img.ivsky.com/img/tupian/pre/201610/09/beifang_shanlin_xuejing-001.jpg";
32 var wReq = System.Net.WebRequest.Create(url) as System.Net.HttpWebRequest;
33 var resp = wReq.GetResponse() as System.Net.HttpWebResponse;
34 using (var stream = resp.GetResponseStream())
35 {
36 // 請不要使用UploadManager的UploadStream方法,由於此流不支持查找(沒法獲取Stream.Length)
37 // 請使用FormUploader或者ResumableUploader的UploadStream方法
38 FormUploader fu = new FormUploader();
39 var result = fu.UploadStream(stream, "xuejing-001.jpg", token);
40 Console.WriteLine(result);
41 }
42 }
43 catch (Exception ex)
44 {
45 Console.WriteLine(ex);
46 }
47 }
View Code

 

 3 接下來咱們在 ueditor 的代碼文件夾下面增長一個類 來控制代碼上傳 七牛雲 而且返回相應的文件名,新建名稱爲 MyUploadHandler 的控制類 ,其代碼結構跟UploadHandler  同樣,

    在這裏咱們只要其中的改 Process  方法。

 

 

 4  下面直接貼  process中上傳的代碼 ,

          代碼總體思路 就是將文件以流的方式經過七牛的sdk  進行上傳,結合上面的上傳例子應該很好理解,最後咱們只須要將獲得的結果反序列化返text就行

 

 1  public override void Process()
 2         { 
 3             string uploadFileName = null;
 4             var accessKey = "填寫在你七牛後臺找到相應的accesskey";
 5             var secretKey = "填寫在你七牛後臺找到相應的secretkey";
 6             HttpPostedFile  file = Request.Files[UploadConfig.UploadFieldName];
 7             Stream myStream = file.InputStream;
 8             
 9             uploadFileName = file.FileName;
10   
11             if (!CheckFileType(uploadFileName))
12             {
13                 Result.State = UploadState.TypeNotAllow;
14                 WriteResult();
15                 return;
16             }
17             if (!CheckFileSize(file.ContentLength))
18             {
19                 Result.State = UploadState.SizeLimitExceed;
20                 WriteResult();
21                 return;
22             }
23             // 生成(上傳)憑證時須要使用此Mac
24             // 這個示例單獨使用了一個Settings類,其中包含AccessKey和SecretKey
25             // 實際應用中,請自行設置您的AccessKey和SecretKey
26             Mac mac = new Mac(accessKey, secretKey);
27             string bucket = "siyouku";
28             string saveKey = uploadFileName;
29 
30 
31             // 使用前請確保AK和BUCKET正確,不然此函數會拋出異常(好比code612/631等錯誤)
32             Qiniu.Common.Config.AutoZone(accessKey, bucket, false);
33 
34 
35             // 上傳策略,參見 
36             // https://developer.qiniu.com/kodo/manual/put-policy
37             PutPolicy putPolicy = new PutPolicy();
38             // 若是須要設置爲"覆蓋"上傳(若是雲端已有同名文件則覆蓋),請使用 SCOPE = "BUCKET:KEY"
39               putPolicy.Scope = bucket + ":" + saveKey;
40             //putPolicy.Scope = bucket;
41             // 上傳策略有效期(對應於生成的憑證的有效期)          
42             putPolicy.SetExpires(3600);
43             // 上傳到雲端多少天后自動刪除該文件,若是不設置(即保持默認默認)則不刪除
44             putPolicy.DeleteAfterDays = 1;
45 
46             // 生成上傳憑證,參見
47             // https://developer.qiniu.com/kodo/manual/upload-token            
48             string jstr = putPolicy.ToJsonString();
49             string token = Auth.CreateUploadToken(mac, jstr);
50             try
51             {
52                     // 請不要使用UploadManager的UploadStream方法,由於此流不支持查找(沒法獲取Stream.Length)
53                     // 請使用FormUploader或者ResumableUploader的UploadStream方法
54                     FormUploader fu = new FormUploader();
55                     var result = fu.UploadStream(myStream, saveKey, token);
56                 var x = Newtonsoft.Json.JsonConvert.DeserializeObject<QiniuResult>(result.Text);
57                 Result.Url = x.key;
58                Result.State = UploadState.Success;
59             }
60             catch (Exception e)
61             {
62                 Result.State = UploadState.FileAccessError;
63                 Result.ErrorMessage = e.Message;
64             }
65             finally
66             {
67                 WriteResult();
68             }
69  
70         }
View Code

 

5 最後你會發現上傳成功的圖片仍是不能正確在 ueditor中顯示,錯誤以下圖,查看html源碼你會發現 是其路徑不對,因此咱們要有一個很重要的步驟 ,也就是改config.json 配置文件中的imageUrlPrefix 屬性 改成你的七牛上圖片的域名,也就是前面綁定的  img.siyouku.cn

 

ok到這裏你就已經完成了editor 上傳圖片到 七牛雲了 ,

 

相關文章
相關標籤/搜索