《介绍一款开源的类Excel电子表格软件》续:七牛云存储实战(C#)
两个月前的发布的博客《介绍一款开源的类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 = ;
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
小道消息:目前还有少量七牛云存储的试用优惠券(一个七牛账户只能只用一次),有需要请留言沟通。
《介绍一款开源的类Excel电子表格软件》续:七牛云存储实战(C#)的更多相关文章
- 介绍一款开源的类Excel电子表格软件
Excel一直以霸主的地位,占领了Windows桌面表格软件市场No 1,与此同一时候,Office套装产品差点儿成为了IT行业的标配办公技能.有无相似Excel的桌面程序,绿色版,实现主要的数 ...
- 一款开源且超好用的网站克隆机 HTTrack
0x00 前言 我们在学习前端的时候,总是会想着去学习其他人网站是如何制作的,或者我们遇到一些比较有用的知识点的时候,我们可能会选择通过 Ctrl + C / Ctrl + V 去扒下内容,然而我并非 ...
- metasploit 一款开源的渗透测试框架
渗透神器漏洞利用框架metasploit from: https://zhuanlan.zhihu.com/p/30743401 metasploit是一款开源的渗透测试框架软件也是一个逐步发展与成熟 ...
- 分享一下怎么开发一款图片视频类App,秒拍和prisma
第一步,分解短视频App的功能 我们在秒拍官网看到如此描述: [视频拍摄及导入]支持直接拍摄及导入手机本地的视频 [照片电影]照片专属特效,轻松创作照片电影 [MV特效]10余款全新MV特效,让普通视 ...
- 一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
在目前的软件项目中,都会较多的使用到对文档的操作,用于记录和统计相关业务信息.由于系统自身提供了对文档的相关操作,所以在一定程度上极大的简化了软件使用者的工作量. 在.NET项目中如果用户提出了相关文 ...
- 几款开源的hybird移动app框架分析
几款开源的Hybrid移动app框架分析 Ionic Onsen UI 与 ionic 相比 jQuery Mobile Mobile Angular UI 结论 很多移动开发者喜欢使用原生代码开发, ...
- 7 款顶级开源 BI(商务智能)软件和报表工具
在这个信息化时代,每分每秒都产生海量数据.在海量数据中,挖掘出有用的数据,并且能以较人性化.直观的方式展示这些数据,变得尤为重要.本文将介绍 7款顶级开源 BI(商务智能)软件和报表工具,用于商业数据 ...
- Metasploit是一款开源的安全漏洞检测工具,
Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,适合于需要核实漏洞的安全专家,同时也适合于强大进攻能力的 ...
- 1. Android 系统上一款开源的图表库
1. MPAndroidChart MPAndroidChart 是 Android 系统上一款开源的图表库.目前提供线图和饼图,支持选择.缩放和拖放. 一个可以拖动缩放的图表库,包含曲线图.直方图 ...
随机推荐
- 表格制作模块xlwt
import xlwtworkbook = xlwt.Workbook(encoding = 'ascii') #创建workbook 括号内容视情况而定sheetname = 'Sheet'book ...
- Ubuntu下shell脚本运行异常:bash和dash的区别
Ubuntu下我用bash到语法写了一个shell脚本(准确的说是把书上的脚本敲进电脑),在ubuntu下,用sh test.sh来运行,但是出现了意料之外到结果,比如echo -e "\n ...
- Spring aop——前置增强和后置增强 使用注解Aspect和非侵入式配置
AspectJ是一个面向切面的框架,它扩展了java语言,定义了AOP语法,能够在编译期提供代码的织入,所以它有一个专门的编译器用来生成遵守字节码字节编码规范的Class文件 确保使用jdk为5.0以 ...
- stm32 MDK5软件仿真之查看io口输出
软件MDK5 stm32的pack 打开MDK,添加工程 一.首先找到Project的Options选项,里面的Debug选为Use Simulator,也就是选择软件仿真. 然后再Logic ...
- android 编译错误 com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
解决方案一: JDK版本不一致造成的,指的是高版本的JDK编译的class不能放在低版本的JDK上运行. 如果是Version 52,就表示JDK8编译的class不能运行在JDK7上,所以需要在本地 ...
- sourceTree忽略跟踪文件
1.未跟踪文件,直接在.gitignore文件打上文件名字,如果要忽略整个文件夹,要在文字后面加上一个/ .如:gradle/ . 2.已跟踪文件,先删除那些文件,再提交到git上,即删除远程的文件, ...
- UILabel的常用属性
UILabel常用属性1——实例化和设置文字 // 实例化UILabel并指定其边框 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake ...
- 单片机TM4C123学习(九):PWM
1.头文件与变量定义 #include "tiva_pwm.h" // PWM 2.初始化 // PWM 初始化,频率为1000,占空比为0 M1PWM7_init(, ); // ...
- hdu 5826 (物理) physics
题目:这里 题意:光滑的水平直线上有n个质量相等的小球,已知每个小球的初始位置,初始速度和方向,每个小球的每个时刻的加速度a都满足a*v=c,v是该时刻的速度,c是已知的 常数,小球之间的碰撞是完全碰 ...
- __slots__ 属性绑定
s = Student() # 创建新的实例 s.name = 'Michael' # 绑定属性'name' s.age = 25 # 绑定属性'age' s.score = 99 # 绑定属性'sc ...