C#调用百度云存储接口上传文件
因前几日见园子里有人说可以把网站静态文件放在百度上,于是去百度开放平台看了看,发现之前那篇文章不是调的云存储接口啊。。。
于是自己写了个C#能调百度云存储的例子(百度云开放平台只提供php、java、Python、c++),下面贴一下步骤和代码,还请多多指点啊!
一、libcurl.NET
百度提供的四种途径我们选择的是curl方式,但是大家都知道curl需要linux环境支持,这里引用了国外的libcurl.NET开源项目。下载最新版本的libcurlnet-1_3.zip,解压后将这(ca-bundle.crt、libcurl.dll、LibCurlNet.dll、LibCurlShim.dll)四个文件放在你自己项目的bin目录下。
然后项目里添加LibCurlNet.dll引用。
二、签名算法
百度的URL签名算法说是用的sha1加密,千万别理解错!这里我是从php的hash_hmac算法转的,代码如下:
- /// <summary>
- /// hmacSha1算法加密
- /// </summary>
- /// <param name="encryptText">加密明文</param>
- /// <param name="encryptKey">加密密钥</param>
- /// <returns></returns>
- public static string hmacSha1(string encryptText, string encryptKey)
- {
- HMACSHA1 myHMACSHA1 = new HMACSHA1(Encoding.Default.GetBytes(encryptKey));
- byte[] RstRes = myHMACSHA1.ComputeHash(Encoding.Default.GetBytes(encryptText));
- return Convert.ToBase64String(RstRes);
- }
三、实现curl上传
其实就是要将下面这段命令翻译成C#
- curl -T bs.txt -v
- "http://bcs.duapp.com/bucket/testobject?sign=MBO:f:PVaOdaf%2BxNoC7aXRqL%2FJq5Kp7a4%3D"
废话不多直接上代码
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Security.Cryptography;
- using System.Text;
- using System.Web;
- using SeasideResearch.LibCurlNet;
- namespace BaiduCloudStorage
- {
- class Program
- {
- static void Main(string[] args)
- {
- string flag = "MBO";
- string accessKey = "83ee44XXXX0799394e9fXXXXa731XXXX";
- string secrectKey = "0Aa2XXXXdff516c44XXXX9e1ef0XXXX1";
- string bucket = "sitefiles", sobject = "Media/80cb39dbb6fd526694279e79aa18972bd407364a.jpg";
- string content = flag + "\n";
- content += "Method=PUT\n";
- content += "Bucket=sitefiles\n";
- content += "Object=/" + sobject + "\n";
- //content += "Ip=115.173.192.3\n";
- //content += "Time=2014-01-13\n";
- //content += "Size=1024\n"; // B字节
- string signture = flag + ":" + accessKey + ":" + HttpUtility.UrlEncode(hmacSha1(content, secrectKey));
- string url = "http://bcs.duapp.com/" + bucket + "/" + HttpUtility.UrlEncode(sobject) + "?sign=" + signture;
- FileStream fs = new FileStream(@"D:\Media\9e1e73600c338744337ee82c500fd9f9d62aa0e6.jpg", FileMode.Open, FileAccess.Read, FileShare.Read);
- try
- {
- Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL);
- Easy easy = new Easy();
- Easy.ReadFunction rf = new Easy.ReadFunction(OnReadData);
- easy.SetOpt(CURLoption.CURLOPT_READFUNCTION, rf);
- easy.SetOpt(CURLoption.CURLOPT_READDATA, fs);
- Easy.WriteFunction wf = new Easy.WriteFunction(OnWriteData);
- easy.SetOpt(CURLoption.CURLOPT_URL, url);
- easy.SetOpt(CURLoption.CURLOPT_UPLOAD, );
- easy.SetOpt(CURLoption.CURLOPT_INFILESIZE, fs.Length);
- easy.SetOpt(CURLoption.CURLOPT_VERBOSE, );
- easy.SetOpt(CURLoption.CURLOPT_WRITEDATA, wf);
- Easy.DebugFunction df = new Easy.DebugFunction(OnDebug);
- easy.SetOpt(CURLoption.CURLOPT_DEBUGFUNCTION, df);
- easy.SetOpt(CURLoption.CURLOPT_VERBOSE, true);
- easy.Perform();
- easy.Cleanup();
- fs.Close();
- Curl.GlobalCleanup();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex);
- }
- Console.ReadKey();
- }
- public static Int32 OnReadData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData)
- {
- FileStream fs = (FileStream)extraData;
- return fs.Read(buf, , size * nmemb);
- }
- public static void OnDebug(CURLINFOTYPE infoType, String msg, Object extraData)
- {
- // Console.WriteLine(msg);
- }
- public static Int32 OnProgress(Object extraData, Double dlTotal, Double dlNow, Double ulTotal, Double ulNow)
- {
- Console.WriteLine("Progress: {0} {1} {2} {3}", dlTotal, dlNow, ulTotal, ulNow);
- return ; // standard return from PROGRESSFUNCTION
- }
- public static Int32 OnWriteData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData)
- {
- Console.Write(System.Text.Encoding.UTF8.GetString(buf));
- return size * nmemb;
- }
- /// <summary>
- /// hmacSha1算法加密
- /// </summary>
- /// <param name="encryptText">加密明文</param>
- /// <param name="encryptKey">加密密钥</param>
- /// <returns></returns>
- public static string hmacSha1(string encryptText, string encryptKey)
- {
- HMACSHA1 myHMACSHA1 = new HMACSHA1(Encoding.Default.GetBytes(encryptKey));
- byte[] RstRes = myHMACSHA1.ComputeHash(Encoding.Default.GetBytes(encryptText));
- return Convert.ToBase64String(RstRes);
- }
- }
- }
至于libcurl.NET具体咋用,我这儿真没什么资料,都谷歌上查的,兄弟们有相关资料的给留个地址啊,我这还想继续完善完善啊。。。
C#调用百度云存储接口上传文件的更多相关文章
- 使用python或robotframework调multipart/form-data接口上传文件
这几天调一个multipart/form-data类型的接口,遇到点小阻碍.之前同事有使用urllib库写了个类似的方法实现,比较长,想要改的时候发现不太好使.在网上查找发现用requests库做这个 ...
- 使用RestTemplate调用接口上传文件
场景 接口接受一个文件,缓存在本地,验证文件的完整性及内容,然后将文件上传至云服务器: 下面只写利用RestTemplate将文件上传至云服务器,至于文件上传以及缓存在本地可以参考:JAVA文件上传: ...
- java 调用Spring接口上传文件及其他参数填充
第一步:在Spring配置中添加以下内容 <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> < ...
- Jmeter接口上传文件
一.使用抓包软件抓取该接口,查看参数(图例使用的是charles) 可以看到上传文件的参数名是file1 二.把抓取到的普通参数都放在参数这一栏里,如图所示,不要在意马赛克 三.参数名称写在如图所示的 ...
- C# 使用HttpWebRequest通过PHP接口 上传文件
1:上传文件实例 public void UploadXMLLog(string xmlpath) { NameValueCollection nvc = ne ...
- Android、iOS与Servlet接口上传文件和JSON串的交互
package etcom.servlet; import java.io.File; import java.io.IOException; import java.sql.Connection; ...
- 阿里云对象存储oss上传文件夹
最近公司做工程项目,实现文件夹云存储上传. 网上找了一天,发现网上很多代码都存在相似问题,最后终于找到了一个满足我需求的项目. 工程如下: 这里对项目的大文件传输功能做出分析,怎么实现文件夹上传的,如 ...
- 阿里云OSS图片云存储测试上传
在开发DEMO之前首先要确定 你开发OSS服务并获取了 accessKeyId和accessKeySecret final String key = MD5.Md5(DateFormat.format ...
- 阿里云oss怎么上传文件夹
最近公司在做工程项目,实现文件夹云存储上传 网上找了很久,发现很多项目都存在一些问题,但还是让我找到了一个成熟的项目. 工程: 对项目的文件夹云存储上传功能做出分析,找出文件夹上传的原理,对文件夹的云 ...
随机推荐
- 向Python女神推荐这些年我追过的经典书籍
http://blog.csdn.net/yueguanghaidao/article/details/10416867 最近"瑞丽模特学Python"的热点牵动了大江南北程序员的 ...
- Delphi中禁止WebBrowser右键的方法
uses MSHtml; //在控件标签additional中找到TApplicationEvents控件,拖到窗体上.在TApplicationEvents的OnMessage事件中加入以下代码: ...
- luoguP2266 爱的距离
题目:http://www.luogu.org/problem/show?pid=2266 题解:感觉题意不清,就去瞅题解了T_T 然后发现好水... 类似于MST,我们把边从小到大加进去就可以了. ...
- 【转】iOS开发入门:Xcode常用快捷键
原文网址:http://www.3g-edu.org/ios_free/3G-89.htm Xcode有许多快捷键,这些快捷键在Xcode的工具栏里都有标注,学会使用这些快捷键可以大大的提高你的编程效 ...
- Linux学习笔记5——虚拟内存
一.为什么要有虚拟内存 虚拟内存的提出,是为了禁止用户直接访问物理存储设备,有助于系统稳定. 二.为什么一个程序不能访问另外一个程序的地址指向的空间 1:每个程序的开始地址0x80084000 2:程 ...
- 4种字符串匹配算法:KMP(下)
回顾:4种字符串匹配算法:BS朴素 Rabin-karp(上) 4种字符串匹配算法:有限自动机(中) 1.图解 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R ...
- 让nginx支持文件上传的几种模式
文件上传的几种不同语言和不同方法的总结. 第一种模式 : PHP 语言来处理 这个模式比较简单, 用的人也是最多的, 类似的还有用 .net 来实现, jsp来实现, 都是处理表单.只有语言的差别, ...
- 字符集(CHARACTER SET)和校对集(COLLATE)
http://blog.sina.com.cn/s/blog_9707fac301016wxm.html http://www.th7.cn/db/mysql/201412/84636.shtml 从 ...
- 程序员取悦女朋友的正确姿势---Tips(iOS美容篇)
前言 女孩子都喜欢用美图工具进行图片美容,近来无事时,特意为某人写了个自定义图片滤镜生成器,安装到手机即可完成自定义滤镜渲染照片.app独一无二,虽简亦繁. JH定律:魔镜:最漂亮的女人是你老婆魔镜: ...
- ecshop获取浏览器各个版本
<?php /** * 获得浏览器名称和版本 * * @access public * @return string */ function get_user_browser() { if (e ...