小白程序员_个人页

个人头像照片 小白程序员
个人头像照片
0
5
0

个人介绍

暂无个人介绍

擅长的技术

获得更多能力
通用技术能力:

暂时未有相关通用技术能力~

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
  • 提交了问题 2017-02-16

    OSS中上传字符串是什么意思

  • 提交了问题 2017-02-15

    cOSS使用中bug问题

  • 提交了问题 2015-11-11

    oss上传文件 模拟http头请求数字签名验证失败

暂无更多信息
正在加载, 请稍后...
暂无更多信息
  • 提交了问题 2017-02-16

    OSS中上传字符串是什么意思

  • 提交了问题 2017-02-15

    cOSS使用中bug问题

  • 回答了问题 2017-02-15

    cOSS使用中bug问题

    RecOSS使用中bug问题 补上两张图片 ------------------------- 上两张图 为具体报错电脑 报错信息 上两张图 为具体报错电脑 报错信息上两张图 为具体报错电脑 报错信息 ------------------------- RecOSS使用中bug问题 问题解决了。。。手动添加文件夹C:\Users\Administrator\AppData\Local\Temp\2 我觉得应该是权限问题  因为我现在手动在C:\Users\Administrator\AppData\Local\Temp 目录下面 添加一个名叫“2”的文件夹 在运行程序 就不报错了 正常运行了  但是我奇怪的是 我把2文件夹删除了 然后将temp的权限设置成administrator 完全控制  everyone也是完全控制 并且以管理员身份运行程序 还有阿里oss的dll也取得了管理员权限  但是删除2文件后 马上 就报错了 也就是说阿里的oss提供的获取文件列表ListObjects方法 不能自动创建文件夹“2”
    踩0 评论0
  • 提交了问题 2015-11-11

    oss上传文件 模拟http头请求数字签名验证失败

  • 回答了问题 2015-11-11

    oss上传文件 模拟http头请求数字签名验证失败

    回 楼主小白程序员的帖子 我试了 去掉'/bucketdataupdate/2.jpg'后面的'\n' dtime后面 加了\n的 运行还是同样的错误 我把生成的头贴出来: PUT /2.jpg HTTP/1.1 Host:bucketdataupdate.oss-cn-beijing.aliyuncs.com Content-Encoding:utf-8 Content-Disposition: attachment;filename=2.jpg Date:Wed, 11 Nov 2015 05:50:29 GMT Content-Type:image/jpg Content-Length:176853 Authorization:OSS 我的idkey:FNpk4LN0ZMgxktXiDw+WTXxx2SI= Authorization验证头: PUT 0925f7b63fd62bbbc9db313676681658 image/jpg Wed, 11 Nov 2015 05:50:29 GMT /bucketdataupdate/2.jpg ------------------------- 回 1楼姜恒的帖子 还是不行 怎么办啊 你有qq吗加一个 ------------------------- 回 2楼shinenuaa的帖子 这个并没有什么用啊 ------------------------- 回 8楼姜恒的帖子 谢谢 指点 请求成功了 正确的Authorization 应该是 string mk = 'PUT\n'                                          //VERB                + '\n'                                                 //CONTENT-MD5如果不需要验证内容 也必须加'\n'                 + 'image/jpg\n'                                 //CONTENT-TYPE                 + dtime + '\n'                                   // DATE 服务器时间似乎不是北京时间 必须用当前时间减8个小时的时间 请求                 + '/bucketdataupdate/6.jpg';           //访问的OSS资源 但是又出一个问题 为什么我加上6.jpg的MD5 就验证不通过?是不是服务器端 求MD5的方式和我的不一样? 但是我求出来的md5绝对没有问题 因为我的系统右键属性可以看到文件的md5值 和我求出来的一样。为什么加上 就不行了呢? string fileMD5 = GetMD5HashFromFile(file.FullName);             string mk = 'PUT\n'                + fileMD5+'\n'                 + 'image/jpg\n'                 + dtime + '\n'                 + '/bucketdataupdate/6.jpg'; 这样就不可以 不加md5 就对  why? ------------------------- Reoss上传文件 模拟http头请求数字签名验证失败 谢谢大家问题终于全部解决了   研究了两天 现在分享出来 希望以后有人遇到这样的问题 可以很快的搞定 string fileMD5 = GetMD5HashFromFile(file.FullName);             string mk = 'PUT\n'                + fileMD5+'\n'                 + 'image/jpg\n'                 + dtime + '\n'                 + '/bucketdataupdate/6.jpg'; HTTP的Content-MD5并不是单纯的文件的MD5 ,是遵循rfc1864标准(就是把md5的二进制转换成base64)。 所以上面的那个直接加fileMD5是错误的 由于http首部无法记录二进制值 所以必须通过base64处理 如果需要MD5验证 http头也需要加上Content-md5:值  这个字段 直接上源码: const string accessId = '我的keyid';         const string accessKey = '我的keypass';         const string endpoint = 'http://oss-cn-beijing.aliyuncs.com';         const string bucketName = 'bucketdataupdate'; private void button1_Click(object sender, EventArgs e)         {                                     FileInfo file = new FileInfo(@'E:\Cshap_text\PublishUpdate\PublishUpdate\bin\Debug\2.jpg');            byte[] fileMD5 = GetMD5HashByteFromFile(file.FullName);//这个地方得到的是md5的byte形式 不要转成16进制字符串             string base64FileMd5 = Convert.ToBase64String(fileMD5);         //由于服务器时间比本地时间晚8个小时 所以要减去8             string dtime = DateTime.Now.AddHours(-8).ToString('r');             StringBuilder httpHeader = new StringBuilder();             httpHeader.Append('PUT /2.jpg HTTP/1.1\r\n');             httpHeader.Append('Host:bucketdataupdate.oss-cn-beijing.aliyuncs.com\r\n');                        httpHeader.Append('Content-Md5:'+base64FileMd5 +'\r\n');             httpHeader.Append('Content-Encoding:utf-8\n');             httpHeader.Append('Content-Disposition: attachment;filename=2haha.jpg\r\n');             httpHeader.Append('Date:' + dtime + '\r\n');             httpHeader.Append('Content-Type:image/jpg\r\n');             httpHeader.Append('Content-Length:' + file.Length + '\r\n');                        HMACSHA1 hmacsha1 = new HMACSHA1();             hmacsha1.Key = Encoding.UTF8.GetBytes('我的keyPass');                      string mk = 'PUT\n'                   //0925F7B63FD62BBBC9DB313676681658                + base64FileMd5 + '\n'                 + 'image/jpg\n'                 + dtime + '\n'                 + '/bucketdataupdate/2.jpg';             byte[] dataBuffer = Encoding.UTF8.GetBytes(mk);             byte[] hashBytes = hmacsha1.ComputeHash(dataBuffer);             string base64 = Convert.ToBase64String(hashBytes);                        httpHeader.Append('Authorization:OSS 我的keyid:' + base64 + '\r\n');             httpHeader.Append('\r\n');             byte[] header = Encoding.UTF8.GetBytes(httpHeader.ToString());             Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);             client.Connect('bucketdataupdate.oss-cn-beijing.aliyuncs.com', 80);             client.Send(header);             FileStream fs = new FileStream(@'E:\Cshap_text\PublishUpdate\PublishUpdate\bin\Debug\2.jpg', FileMode.Open);             byte[] buffer = new byte[1024];             int redSize = 0;             while ((redSize = fs.Read(buffer, 0, buffer.Length)) > 0)             {                 client.Send(buffer,0,redSize,SocketFlags.None);             }             fs.Close();             //client.SendFile(@'E:\Cshap_text\PublishUpdate\PublishUpdate\bin\Debug\2.jpg');             byte[] recbuffer = new byte[1024];             client.Receive(recbuffer);             string msg = Encoding.UTF8.GetString(recbuffer);             client.Close();         } private static byte[] GetMD5HashByteFromFile(string fileName)         {             try             {                 FileStream file = new FileStream(fileName, FileMode.Open);                 System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();                 byte[] retVal = md5.ComputeHash(file);                 file.Close();                 return retVal;             }             catch (Exception ex)             {                 throw new Exception('GetMD5HashFromFile() fail,error:' + ex.Message);             }         }         private static string GetMD5HashStringFromFile(string fileName)          {          try          {          FileStream file = new FileStream(fileName, FileMode.Open);          System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();          byte[] retVal = md5.ComputeHash(file);          file.Close();                  StringBuilder sb = new StringBuilder();          for (int i = 0; i          {          sb.Append(retVal .ToString('x2'));         }         return sb.ToString();         }         catch (Exception ex)         {         throw new Exception('GetMD5HashFromFile() fail,error:' + ex.Message);         }         }    }
    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息