首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软层对象存储ETag MD5校验和计算

软层对象存储ETag MD5校验和计算
EN

Stack Overflow用户
提问于 2016-01-25 21:28:44
回答 2查看 213关注 0票数 0

在将数据传递给软层对象存储时,我正在设法计算正确的校验和。

我知道ETag是问题所在,因为如果我从请求中删除它,它就能工作,但是我更愿意使用它来验证上传是否损坏。

这是我的方法:

代码语言:javascript
复制
    public bool SaveFile(byte[] file, eFetchStorageContainers container, string internalFileName, string fileName = "", bool overPublicNetwork = false)
    {
        Authenticate(overPublicNetwork);

        client = new RestClient(storage_url);
        var resourcePath = string.Format("/{0}/{1}", container, internalFileName);
        var req = new RestRequest(resourcePath, RestSharp.Method.PUT);

        req.AddHeader("X-Auth-Token", auth_token);
        req.AddFile(internalFileName, file, fileName);

        var md5Checksum = BitConverter.ToString(MD5.Create().ComputeHash(file)).Replace("-", string.Empty).ToLower();
        req.AddHeader("ETag", md5Checksum);

        var resp = client.Execute(req);

        return false;
    } 

下面是如何定义ETag:

我认为问题在于我得到的是文件的校验和,而不是请求体。

  1. 我想验证一下,我应该得到请求正文的校验和,而不仅仅是文件。
  2. 如果以上是真的,我甚至不确定如何得到身体的校验和-会喜欢一些指导.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-26 14:54:09

实际上,我已经知道了,我使用的是RestSharp,但是不可能得到请求体。

我转到了HttpClient,能够访问请求体来创建校验和。

代码语言:javascript
复制
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("X-Auth-Token", auth_token);
var bytes = new ByteArrayContent(file);
var formData = new MultipartFormDataContent();
formData.Add(bytes, internalFileName, internalFileName);

// this creates a checksum to send over for verification of non corrupted transfers
// this is also prevents us from using RestSharp due to its inability to create a checksum of the request body prior to sending
var md5Checksum = BitConverter.ToString(MD5.Create().ComputeHash(formData.ReadAsByteArrayAsync().Result)).Replace("-", string.Empty).ToLower();
httpClient.DefaultRequestHeaders.Add("ETag", md5Checksum);

var url = string.Format("{0}/{1}{2}/{3}", storage_url, containerName, folderId, internalFileName);
var resp = httpClient.PutAsync(url, formData).Result;

httpClient.Dispose();
票数 -1
EN

Stack Overflow用户

发布于 2016-01-26 14:23:32

嗯,我没有使用C#,但对我来说,使用curl很好。我得到了文件的校验和,它运行良好。为了以防万一,这里有一些关于这个https://community.runabove.com/kb/en/object-storage/how-to-check-file-consistency-using-etag-and-md5.html的例子

确保您的请求与上面的链接示例类似。

这是我用的卷发:

curl -X -T -T "C:\Users\ncabero\Downloads\picture.jpg“-H”X-Auth-令牌: AUTH_XXXXXXX“-H "Etag: a43bf68dd35599a7873c12128f71b1f4”d684780d-aafe-4772-bcbb-0f07d5f6edf3/rcvtest/picture.jpg

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35002743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档