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

于是自己写了个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算法转的,代码如下:

 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 = myHMACSHA1.ComputeHash(Encoding.Default.GetBytes(encryptText));
11             return Convert.ToBase64String(RstRes);
12         }

View Code

三、实现curl上传

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

curl -T bs.txt -v
"http://bcs.duapp.com/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 {
 12     class 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=2014-01-13\n";
 26             //content += "Size=1024\n"; // B字节
 27
 28             string signture = flag + ":" + accessKey + ":" + HttpUtility.UrlEncode(hmacSha1(content, secrectKey));
 29             string url = "http://bcs.duapp.com/" + 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 = myHMACSHA1.ComputeHash(Encoding.Default.GetBytes(encryptText));
102             return Convert.ToBase64String(RstRes);
103         }
104     }
105 }

View Code

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

转载于:https://www.cnblogs.com/sheng9hhd/p/3519685.html

C#调用百度云存储接口上传文件相关推荐

  1. php 百度网盘上传文件大小限制吗,百度云存储,curl_百度云存储如何上传数G超大文件(视频类)和防盗链等一系列问题,百度云存储,curl - phpStudy...

    百度云存储如何上传数G超大文件(视频类)和防盗链等一系列问题 最近在开发一个视频网站,打算用百度开放云平台上的云存储,但视频较大,一般有几个G(高清电影).1G一下的视频管理控制台里能用页面上传,但1 ...

  2. TP腾讯云存储COS上传文件

    composer下载: "require": {"qcloud/cos-sdk-v5": ">=2.0" } composer安装 p ...

  3. 利用百度云API接口上传照片进行植物识别

    第一步还是引库,确定自己安装过这些库了,没有安装的需要自行安装 import requests import base64 import os #os库是下面多张图片进行识别的,如果一次识别一张图片就 ...

  4. Android中使用又拍云存储来上传文件(包括图片、音频和视频等)

    资料: 在又拍云存储上申请账号,然后购买一定的空间.(具体可上它的官网详细了解) 原理: 又拍云存储说白了就是一个中介.客户端把所需要上传的东西传到又拍云端服务器,云端服务器在通知到我们自己创建的服务 ...

  5. springboot调用python脚本_Springboot实现上传文件接口,使用python的requests进行组装报文上传文件的方法...

    记录瞬间 近段时间使用Springboot实现了文件的上传服务,但是在使用python的requests进行post上传时,总是报错. 比如: 1.Current request is not a m ...

  6. 微信小程序云开发实现上传文件和预览下载文件

    微信小程序云开发实现上传文件和预览下载文件 一.前言 目前微信提供了一个接口 wx.chooseMessageFile 它能让用户从聊天记录里面选择一个或者多个文件,然后返回它的一些信息,列入文件的p ...

  7. sscom串口网络数据调试器使用post方法向华为云obs桶上传文件和图片

    原贴地址:sscom串口网络数据调试器使用post方法向华为云obs桶上传文件和图片-云社区-华为云 [摘要] 之前发了文章"postman使用post方法向华为云obs桶上传文件和图片&q ...

  8. postman使用put方法向华为云obs桶上传文件和图片

    原贴地址:https://bbs.huaweicloud.com/blogs/298147 [摘要] postman使用put方法向华为云obs桶上传文件和图片.记录下过程. postman使用put ...

  9. 云服务器可以文件服务器,云服务器 可以上传文件

    云服务器 可以上传文件 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装数据 ...

最新文章

  1. 前端性能优化—将CSS文件放在顶部
  2. 回溯求解排列组合(求源码评论区留言)
  3. 机器学习必备的数学知识,一次学会
  4. Cobbler安装指南
  5. Bug:No mapping for GET /onepill//swagger-ui.html
  6. linux服务器搭建_Linux怎么搭建ftp服务器,Windows怎么访问?按此教程10分钟完成...
  7. java day52【综合案例day04】
  8. VMware ESXi5.0防火墙命令
  9. 课程笔记--复习专用
  10. OpenCV3.4.13+OpenCV_contrib 双摄像头实时拼接 环境配置
  11. Java项目开发管理工具-Maven基础
  12. recv函数的返回值梳理
  13. 20220527_Java_反射的各种方法
  14. 职业学校计算机和机电哪个好,职业学校都有什么专业10大热门专业
  15. arduino-esp32-点亮板载LED,闪烁LED。02
  16. kylin build过程详解
  17. 小白学习的sql注入
  18. 【从零开始学极狐gitlab】07作业关键字allow_failure、when、timeout(二) #JIHULAB101
  19. STM32通用FLASH管理软件包——SFUD/FAL
  20. 继sina想在csdc开博

热门文章

  1. 自学前端,你必须要掌握的3种定时任务
  2. QQ直播使用常见问题解决办法(转)
  3. 股东刚减持,股价却起飞?用Python量化A股解禁数据,利空出尽是利好? | 邢不行
  4. VScode使用全指南 (环境配置,插件推荐,美化) (C++,Python,LaTeX,R...)
  5. ARM的异常处理机制
  6. 持续集成:Jenkins邮件通知配置方法介绍
  7. AlertDialog crashes with BadTokenException
  8. 惠普服务器c3000怎么用显示器,惠普复印机怎么用
  9. socket和sockaddr以及sockaddr_in
  10. python做条形统计图