700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C#调用百度云存储接口上传文件

C#调用百度云存储接口上传文件

时间:2020-02-17 07:30:34

相关推荐

C#调用百度云存储接口上传文件

因前几日见园子里有人说可以把网站静态文件放在百度上,于是去百度开放平台看了看,发现之前那篇文章不是调的云存储接口啊。。。

于是自己写了个C#能调百度云存储的例子(百度云开放平台只提供php、java、Python、c++),下面贴一下步骤和代码,还请多多指点啊!

一、

百度提供的四种途径我们选择的是curl方式,但是大家都知道curl需要linux环境支持,这里引用了国外的开源项目。下载最新版本的libcurlnet-1_3.zip,解压后将这(ca-bundle.crt、libcurl.dll、LibCurlNet.dll、LibCurlShim.dll)四个文件放在你自己项目的bin目录下。

然后项目里添加LibCurlNet.dll引用。

二、签名算法

百度的URL签名算法说是用的sha1加密,千万别理解错!这里我是从php的hash_hmac算法转的,代码如下:

1 /// <summary> 2 /// hmacSha1算法加密 3 /// </summary> 4 /// <param name="encryptText">加密明文</param> 5 /// <param name="encryptKey">加密密钥</param> 6 /// <returns></returns> 7 public static string hmacSha1(string encryptText, string encryptKey) 8 { 9 HMACSHA1 myHMACSHA1 = new HMACSHA1(Encoding.Default.GetBytes(encryptKey));10 byte[] RstRes = puteHash(Encoding.Default.GetBytes(encryptText));11 return Convert.ToBase64String(RstRes);12 }

View Code

三、实现curl上传

其实就是要将下面这段命令翻译成C#

curl -T bs.txt -v "/bucket/testobject?sign=MBO:f:PVaOdaf%2BxNoC7aXRqL%2FJq5Kp7a4%3D"

废话不多直接上代码

1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Security.Cryptography; 6 using System.Text; 7 using System.Web; 8 using SeasideResearch.LibCurlNet; 9 10 namespace BaiduCloudStorage 11 { 12class Program 13{ 14 static void Main(string[] args) 15 { 16 string flag = "MBO"; 17 string accessKey = "83ee44XXXX0799394e9fXXXXa731XXXX"; 18 string secrectKey = "0Aa2XXXXdff516c44XXXX9e1ef0XXXX1"; 19 string bucket = "sitefiles", sobject = "Media/80cb39dbb6fd526694279e79aa18972bd407364a.jpg"; 20 string content = flag + "\n"; 21 content += "Method=PUT\n"; 22 content += "Bucket=sitefiles\n"; 23 content += "Object=/" + sobject + "\n"; 24 //content += "Ip=115.173.192.3\n"; 25 //content += "Time=-01-13\n"; 26 //content += "Size=1024\n"; // B字节 27 28 string signture = flag + ":" + accessKey + ":" + HttpUtility.UrlEncode(hmacSha1(content, secrectKey)); 29 string url = "/" + bucket + "/" + HttpUtility.UrlEncode(sobject) + "?sign=" + signture; 30 31 FileStream fs = new FileStream(@"D:\Media\9e1e73600c338744337ee82c500fd9f9d62aa0e6.jpg", FileMode.Open, FileAccess.Read, FileShare.Read); 32 33 try 34 { 35 Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL); 36 37 Easy easy = new Easy(); 38 Easy.ReadFunction rf = new Easy.ReadFunction(OnReadData); 39 easy.SetOpt(CURLoption.CURLOPT_READFUNCTION, rf); 40 easy.SetOpt(CURLoption.CURLOPT_READDATA, fs); 41 42 Easy.WriteFunction wf = new Easy.WriteFunction(OnWriteData); 43 easy.SetOpt(CURLoption.CURLOPT_URL, url); 44 easy.SetOpt(CURLoption.CURLOPT_UPLOAD, 1); 45 easy.SetOpt(CURLoption.CURLOPT_INFILESIZE, fs.Length); 46 47 easy.SetOpt(CURLoption.CURLOPT_VERBOSE, 1); 48 easy.SetOpt(CURLoption.CURLOPT_WRITEDATA, wf); 49 50 Easy.DebugFunction df = new Easy.DebugFunction(OnDebug); 51 easy.SetOpt(CURLoption.CURLOPT_DEBUGFUNCTION, df); 52 easy.SetOpt(CURLoption.CURLOPT_VERBOSE, true); 53 54 easy.Perform(); 55 easy.Cleanup(); 56 fs.Close(); 57 58 Curl.GlobalCleanup(); 59 60 } 61 catch (Exception ex) 62 { 63 Console.WriteLine(ex); 64 } 65 66 Console.ReadKey(); 67 } 68 69 public static Int32 OnReadData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData) 70 { 71 FileStream fs = (FileStream)extraData; 72 return fs.Read(buf, 0, size * nmemb); 73 } 74 75 public static void OnDebug(CURLINFOTYPE infoType, String msg, Object extraData) 76 { 77 // Console.WriteLine(msg); 78 } 79 80 public static Int32 OnProgress(Object extraData, Double dlTotal, Double dlNow, Double ulTotal, Double ulNow) 81 { 82 Console.WriteLine("Progress: {0} {1} {2} {3}", dlTotal, dlNow, ulTotal, ulNow); 83 return 0; // standard return from PROGRESSFUNCTION 84 } 85 86 public static Int32 OnWriteData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData) 87 { 88 Console.Write(System.Text.Encoding.UTF8.GetString(buf)); 89 return size * nmemb; 90 } 91 92 /// <summary> 93 /// hmacSha1算法加密 94 /// </summary> 95 /// <param name="encryptText">加密明文</param> 96 /// <param name="encryptKey">加密密钥</param> 97 /// <returns></returns> 98 public static string hmacSha1(string encryptText, string encryptKey) 99 {100 HMACSHA1 myHMACSHA1 = new HMACSHA1(Encoding.Default.GetBytes(encryptKey));101 byte[] RstRes = puteHash(Encoding.Default.GetBytes(encryptText));102 return Convert.ToBase64String(RstRes);103 }104}105 }

View Code

至于具体咋用,我这儿真没什么资料,都谷歌上查的,兄弟们有相关资料的给留个地址啊,我这还想继续完善完善啊。。。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。