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算法转的,代码如下:
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#调用百度云存储接口上传文件相关推荐
- php 百度网盘上传文件大小限制吗,百度云存储,curl_百度云存储如何上传数G超大文件(视频类)和防盗链等一系列问题,百度云存储,curl - phpStudy...
百度云存储如何上传数G超大文件(视频类)和防盗链等一系列问题 最近在开发一个视频网站,打算用百度开放云平台上的云存储,但视频较大,一般有几个G(高清电影).1G一下的视频管理控制台里能用页面上传,但1 ...
- TP腾讯云存储COS上传文件
composer下载: "require": {"qcloud/cos-sdk-v5": ">=2.0" } composer安装 p ...
- 利用百度云API接口上传照片进行植物识别
第一步还是引库,确定自己安装过这些库了,没有安装的需要自行安装 import requests import base64 import os #os库是下面多张图片进行识别的,如果一次识别一张图片就 ...
- Android中使用又拍云存储来上传文件(包括图片、音频和视频等)
资料: 在又拍云存储上申请账号,然后购买一定的空间.(具体可上它的官网详细了解) 原理: 又拍云存储说白了就是一个中介.客户端把所需要上传的东西传到又拍云端服务器,云端服务器在通知到我们自己创建的服务 ...
- springboot调用python脚本_Springboot实现上传文件接口,使用python的requests进行组装报文上传文件的方法...
记录瞬间 近段时间使用Springboot实现了文件的上传服务,但是在使用python的requests进行post上传时,总是报错. 比如: 1.Current request is not a m ...
- 微信小程序云开发实现上传文件和预览下载文件
微信小程序云开发实现上传文件和预览下载文件 一.前言 目前微信提供了一个接口 wx.chooseMessageFile 它能让用户从聊天记录里面选择一个或者多个文件,然后返回它的一些信息,列入文件的p ...
- sscom串口网络数据调试器使用post方法向华为云obs桶上传文件和图片
原贴地址:sscom串口网络数据调试器使用post方法向华为云obs桶上传文件和图片-云社区-华为云 [摘要] 之前发了文章"postman使用post方法向华为云obs桶上传文件和图片&q ...
- postman使用put方法向华为云obs桶上传文件和图片
原贴地址:https://bbs.huaweicloud.com/blogs/298147 [摘要] postman使用put方法向华为云obs桶上传文件和图片.记录下过程. postman使用put ...
- 云服务器可以文件服务器,云服务器 可以上传文件
云服务器 可以上传文件 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装数据 ...
最新文章
- 前端性能优化—将CSS文件放在顶部
- 回溯求解排列组合(求源码评论区留言)
- 机器学习必备的数学知识,一次学会
- Cobbler安装指南
- Bug:No mapping for GET /onepill//swagger-ui.html
- linux服务器搭建_Linux怎么搭建ftp服务器,Windows怎么访问?按此教程10分钟完成...
- java day52【综合案例day04】
- VMware ESXi5.0防火墙命令
- 课程笔记--复习专用
- OpenCV3.4.13+OpenCV_contrib 双摄像头实时拼接 环境配置
- Java项目开发管理工具-Maven基础
- recv函数的返回值梳理
- 20220527_Java_反射的各种方法
- 职业学校计算机和机电哪个好,职业学校都有什么专业10大热门专业
- arduino-esp32-点亮板载LED,闪烁LED。02
- kylin build过程详解
- 小白学习的sql注入
- 【从零开始学极狐gitlab】07作业关键字allow_failure、when、timeout(二) #JIHULAB101
- STM32通用FLASH管理软件包——SFUD/FAL
- 继sina想在csdc开博
热门文章
- 自学前端,你必须要掌握的3种定时任务
- QQ直播使用常见问题解决办法(转)
- 股东刚减持,股价却起飞?用Python量化A股解禁数据,利空出尽是利好? | 邢不行
- VScode使用全指南 (环境配置,插件推荐,美化) (C++,Python,LaTeX,R...)
- ARM的异常处理机制
- 持续集成:Jenkins邮件通知配置方法介绍
- AlertDialog crashes with BadTokenException
- 惠普服务器c3000怎么用显示器,惠普复印机怎么用
- socket和sockaddr以及sockaddr_in
- python做条形统计图