兩個月前的發布的博客《介紹一款開源的類Excel電子表格軟件》引起了熱議:在博客園有近2000個View、超過20個評論。 同時有熱心讀者電話咨詢如何能夠在SpreadDesing中實現存儲Excel雲文件,既通過雲方式讀取、加載Excel文件。在本文,我們就大家關心的雲存儲進行實戰操練---基於SpreadDesign源碼基礎。
系統必備:
- 本文選用的國內比較流行的七牛雲存儲。
- SpreadDesign.exe已經升級為最新的Spread Studio 8.35.20143.0內核
- .Netframework 4.0
- Windows 8.1 64系統
- Visual Studio 2013 社區版
要實現的功能列表如下:
注冊七牛雲存儲賬號(有賬號的請跳過本節)
七牛雲存儲 - 主頁 http://www.qiniu.com/ (友情給七牛做個宣傳,多謝七牛給葡萄城控件提供的七牛雲存儲優惠券)
七牛雲存儲的核心團隊成員來自於盛大、金山、網龍、惠普等知名互聯網公司。核心成員之間已合作多年。公司創始人許式偉先生曾在金山、百度和盛大等公司擔任重要領導崗位,具有多年存儲行業實戰經驗,被譽為國內最適合做雲存儲的幾人之一。
話說7牛雲存儲大有來頭!區別於國內外其他雲存儲,七牛自行研發的全分布式架構解決了其他雲存儲單一數據中心架構可能存在的風險,同時首創雙向加速特性對數據上傳下載均加速,使得數據訪問速度較傳統方案平均提升 50%以上。此外,鏡像存儲、客戶端直傳、斷點續上傳、雲端富媒體處理等七牛雲存儲獨有的功能也大大提升了開發效率,最大程度減少了服務器資源浪費。
七牛官方新手上路鏈接
體驗用戶:
- 儲存空間1GB
- 每月Put請求1萬次
- 每月下載流量1GB
- 每月Get請求10萬次
- 創建1個空間
- 僅支持富媒體上傳
升級為標准用戶:
- 儲存空間10GB
- 每月Put請求10萬次
- 每月下載流量10GB
- 每月Get請求100萬次
- 創建20個空間
- 使用七牛的全部功能
7牛雲存儲需要3個信息就可以使用了。
1,AK(AccessKey)
2,SK(SecretKey)
3, Bucket
進入賬號設置-密鑰可以找到如下信息:
關於公鑰、秘鑰的安全問題,請參見官方的《公鑰密鑰應該放在哪里?》
配置一個空間(Bucket),如在本文中我使用的是“grapecity”的空間---空間注意大小寫要和代碼中一致:
配置七牛雲C#開發環境
在七牛開發者中心中,我們可以看到七牛提供了很多SDK:
點擊跳轉到C# SDK 使用指南的頁面。
通過七牛官網提供的URL,下載七牛的C# SDK,以及第三方的開源項目 Json.NET。
同時在GCDN社區,也提供了下載鏡像:http://gcdn.gcpowertools.com.cn/showtopic.aspx?topicid=13778&postid=73156#73156
配置很容易,添加這2個dll引用即可:
Qiniu.DLL
Newtonsoft.Json.dll
代碼實現
初始化七牛SDK代碼
Qiniu.Conf.Config.ACCESS_KEY = "5iujaJ62Q9eQc94uF0sgFzxwVTP-9c_hKq_2jC-j"; Qiniu.Conf.Config.SECRET_KEY = "RMRV45M6J-GpLvz2pAgndn3i-MmTxnDcJMqwsWKG"; private const string Bucket = "grapecity"; private const string Domain = Bucket + ".qiniudn.com";
注:ACCESS_KEY、SECRET_KEY請自行通過七牛后台管理界面申請,每人可申請2對。
List文件列表代碼
public void List(ListView listView1, string bucket = Bucket) { Qiniu.RSF.RSFClient rsf = new Qiniu.RSF.RSFClient(bucket); rsf.Prefix = ""; rsf.Limit = 100; List<DumpItem> items; while ((items = rsf.Next()) != null) { foreach (DumpItem item in items) { Stat(listView1, item.Key, bucket); } } } public void Stat(ListView listView1, string key, string bucket = Bucket) { RSClient client = new RSClient(); Entry entry = client.Stat(new EntryPath(bucket, key)); if (entry.OK) { ListViewItem item = new ListViewItem(new string[]{key, entry.MimeType, DateTime.FromFileTime(entry.PutTime).ToLongDateString(), entry.Fsize.ToString()}); listView1.Items.Add(item); } else { Console.WriteLine("Failed to Stat"); } }
注:key可使用文件名,中文的文件名也可以。
刪除文件代碼:
public bool Delete(string key, string bucket = Bucket) { RSClient client = new RSClient(); CallRet ret = client.Delete(new EntryPath(bucket, key)); return ret.OK; }
下載文件代碼
public string DownLoad(string key1, string domain = Domain) { string baseUrl = GetPolicy.MakeBaseUrl(domain, key1); string private_url = GetPolicy.MakeRequest(baseUrl); private_url = HttpUtility.UrlPathEncode(private_url); try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(private_url); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream stream = response.GetResponseStream(); string newFile = AppDomain.CurrentDomain.BaseDirectory + key1; FileStream write = new FileStream(newFile, FileMode.OpenOrCreate); stream.CopyTo(write); stream.Close(); write.Close(); return newFile; } catch (Exception ex) { System.Diagnostics.Debug.Assert(false, ex.Message); return ""; } }
設計Excel管理UI
彈出的“遠端管理視圖”提供了3個雲存儲相關的功能:
- List:獲得雲端,對應ACCESS_KEY、SECRET_KEY、Bucket下的文件列表
- Delete::刪除雲端的文件
- DownLoad:從雲端下載選擇的文件,
下載雲端的文件后,直接傳給Spread.OpenExcel,即可在SpreadDesign上進行編輯、打印,非常方便。
編輯完成后,點擊“存儲到雲端”,在彈出的對話框中存儲為“本地修改后存儲的文件.xlsx”,然后程序自動實現存儲到雲端。
在雲內容管理界面,刷新可看到文件被自動上傳了:
完整源碼:
http://git.oschina.net/GrapeCity/SpreadDesigner
小道消息:目前還有少量七牛雲存儲的試用優惠券(一個七牛賬戶只能只用一次),有需要請留言溝通。