0

我正在使用 Onedrive 的“从 URL 上传项目”功能。 https://dev.onedrive.com/items/upload_url.htm

大部分时间它都可以正常工作——在过去的几年里,我已经通过这种方式上传了数千个文件。但是在过去的几天里,我一直在尝试批量上传大约 4000 个项目,而这种“从 URL 上传”并没有正常工作......

我在大约 9/10 的上传中看到的是它接受从 URL 上传的请求,并返回一个“进度 URL”来监控,但该进度 URL 始终保持在“status=notStarted”和“percentageComplete= 0%”直到我在五分钟后放弃。

有人使用过从 URL 上传功能吗?有任何经验吗?

我不认为这取决于速率限制。那是因为我当天停止了我的代码,第二天重新启动它,并且得到了相同的行为。

我想知道它是否与要上传到错误的这个特定目标文件名有关?也许 OneDrive 处于一种奇怪的状态,它感觉无法通过侧载上传到这个特定的文件名?

(我想我的下一次尝试将是定期上传,看看会给出什么样的错误消息......)

' Initiate a sideload from the blobURL into OneDrive
Dim sideReqUrl = $"https://api.onedrive.com/v1.0/drive/root:{escapedFolder}:/children?access_token={accessToken}"
Dim sideReqContent = JsonConvert.SerializeObject(New JObject From {{"@content.sourceUrl", blobUrl}, {"@name.conflictBehavior", "fail"}, {"name", unescapedName}, {"file", New JObject}})
Dim sideReq As New HttpRequestMessage(HttpMethod.Post, sideReqUrl)
sideReq.Headers.Add("Prefer", "respond-async")
sideReq.Content = New StringContent(sideReqContent, Text.Encoding.UTF8, "application/json")
Dim sideResp = Await client.SendAsync(sideReq, cancel)
If sideResp.StatusCode <> Net.HttpStatusCode.Accepted Then
    Console.WriteLine($"sideload rejected - {sideResp}")
    Throw New Net.Http.HttpRequestException("sideload rejected")
End If
Dim progUrl = sideResp.Headers.Location ' for monitoring progress
Console.WriteLine($"sideload started - {progUrl}")

' Poll the progress of that sideload until it's complete
Do
    Dim progResp = Await client.GetAsync(progUrl, cancel)
    If progResp.StatusCode <> Net.HttpStatusCode.Accepted Then progResp.EnsureSuccessStatusCode()
    Dim progRespText = Await progResp.Content.ReadAsStringAsync()
    Dim progRespJson = JObject.Parse(progRespText)
    If progResp.StatusCode = Net.HttpStatusCode.Accepted Then
        Console.WriteLine($"sideload ping - {CStr(progRespJson("status"))} - {CStr(progRespJson("percentageComplete"))}%")
        Continue Do
    End If
    Console.WriteLine("SIDELOAD COMPLETE!")
    Return
Loop
4

0 回答 0