上载文件时Microsoft图形API OneDrive文件损坏

问题描述

public JObject UploadByteFile(string upn,string url,IFormFile files)
{
    int start = 0;
    var fileSize = Convert.ToInt32(files.Length);
    int fragSize = 4 * 1024 * 1024;   //1024 * 1024 * 4;

    byte[] file = new byte[fileSize];
    
    var arrayBatches = ByteArrayIntoBatches(file,fragSize);

    var responseCode = HttpStatusCode.OK;
    var jObject = new JObject();

    foreach (var byteArray in arrayBatches)
    {
        int byteArrayLength = byteArray.Length;
        var contentRange = " bytes " + start + "-" + (start + (byteArrayLength - 1)) + "/" + file.Length;

        using (var client = new HttpClient())
        {
            var content = new ByteArrayContent(byteArray);
            content.Headers.Add("Content-Length",byteArrayLength.ToString());
            content.Headers.Add("Content-Range",contentRange);

            var response = client.PutAsync(url,content);
            var strData = response.Result.Content.ReadAsstringAsync().Result;
            responseCode = response.Result.StatusCode;

            if(responseCode == HttpStatusCode.Created)
            {
                JObject data = JObject.Parse(strData);
                string downloadUrl = data["@content.downloadUrl"].ToString();
                string itemId = data["id"].ToString();

                fileSize = fileSize / 1000;
                jObject = JObject.FromObject(new { name = files.Name,id = itemId,url = downloadUrl,size = (double)fileSize });
            }
            else if (responseCode == HttpStatusCode.Conflict)
            {
                var restart = RestartByteFile(upn,url,files.Name);
                responseCode = restart;
            }
        }
        start = start + byteArrayLength;
    }
    if (responseCode == HttpStatusCode.Created) return jObject;
    else return jObject = JObject.FromObject(new { result = "fail"});
}

这是使用OneDrive api上传代码。 以前上传文件文件没有损坏,但如果是最近上传,则作为损坏的文件上传。 你知道为什么吗? 该URL是一个上传会话,并且文件是通过该上传会话上传的。 查看文件的哈希码,将更改并上传文件。 (哈希值已调制。)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)