从iOS应用程序上载OneDrive Business上的文件失败
我正在尝试使用graph API将文件从我的应用程序上载到OneDrive业务存储库 我知道有两个步骤可以做到这一点从iOS应用程序上载OneDrive Business上的文件失败,ios,swift,microsoft-graph-api,onedrive,Ios,Swift,Microsoft Graph Api,Onedrive,我正在尝试使用graph API将文件从我的应用程序上载到OneDrive业务存储库 我知道有两个步骤可以做到这一点 通过调用-https://graph.microsoft.com/v1.0/me/drive/root:/hello.docx:/createUploadSession(此api调用工作正常) 上述API调用的响应是返回一个URL,我正在使用该URL上载文件 这就是我为这个API调用创建请求的方式- var request = NSMutableURLRequest(url:ur
https://graph.microsoft.com/v1.0/me/drive/root:/hello.docx:/createUploadSession
(此api调用工作正常)URL
,我正在使用该URL上载文件var request = NSMutableURLRequest(url:url)
request.timeoutInterval = TimeInterval(60)
request.httpMethod = "PUT"
request.setValue("application/json", forHTTPHeaderField: "accept")
uploadRequest.setValue("26", forHTTPHeaderField:"Content-Length")
uploadRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField:"Content-Type")
let contentLength = Int(file.contentLength) ?? 0;
uploadRequest.setValue("bytes 0-\(25)/\(contentLength)", forHTTPHeaderField:"Content-Range");
注意:上传是使用URLSessionUploadTask
-
self.session.uploadTask(with: request as URLRequest, fromFile: self.fileUrl)
它开始上传,文件100%上传,但最后更新失败,响应如下
<NSHTTPURLResponse: 0x1c0a39420> { URL: https://indxyz-my.sharepoint.com/personal/ram_kapoor_indxyz_onmicrosoft_com/_api/v2.0/drive/items/01BSG3ERN6Y2GOVW7725BZO354PWSELRRZ/uploadSession%3Fguid='cb929739-8c1c-48b2-9be4-3dc1cd2aef09'&path='~tmp0F_hello.docx'&overwrite=True&rename=False&dc=0&tempauth=redacted }
{ Status Code: 400, Headers {
"Content-Length" = (
0
);
Date = (
"Mon, 22 Oct 2018 10:46:09 GMT"
);
"Strict-Transport-Security" = (
"max-age=31536000"
);
microsoftsharepointteamservices = (
"16.0.0.8210"
);
"ms-cv" = (
"nprY6jvwAHAoBWzVPpyQgQ.0"
);
p3p = (
"CP=\"ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI\""
);
"request-id" = (
"ead89a9e-f03b-7000-2805-6cd53e9c9081"
);
sprequestguid = (
"ead89a9e-f03b-7000-2805-6cd53e9c9081"
);
"x-content-type-options" = (
nosniff
);
"x-frame-options" = (
SAMEORIGIN
);
"x-ms-invokeapp" = (
"1; RequireReadOnly"
);
"x-msedge-ref" = (
"Ref A: A4A5ACB248D94992BD7B83645B01A952 Ref B: BOM01EDGE0220 Ref C: 2018-10-22T10:46:09Z"
);
"x-powered-by" = (
"ASP.NET"
);
} }
{URL:https://indxyz-my.sharepoint.com/personal/ram_kapoor_indxyz_onmicrosoft_com/_api/v2.0/drive/items/01BSG3ERN6Y2GOVW7725BZO354PWSELRRZ/uploadSession%3Fguid=“cb929739-8c1c-48b2-9be4-3dc1cd2aef09”&path='~tmp0F_hello.docx'&overwrite=True&rename=False&dc=0&tempauth=redact}
{状态代码:400,标题{
“内容长度”=(
0
);
日期=(
“2018年10月22日星期一10:46:09 GMT”
);
“严格的运输安全”=(
“最大年龄=31536000”
);
microsoftsharepointteamservices=(
"16.0.0.8210"
);
“ms cv”=(
“nprY6jvwAHAoBWzVPpyQgQ.0”
);
p3p=(
“CP=\“所有独立的数字信号处理器相关的行政控制当前的CUSo IVAo IVDo PSA PSD TAI TELo我们的SAMo CNT COM INT NAV ONL PHY PUR UNI”
);
“请求id”=(
“ead89a9e-f03b-7000-2805-6cd53e9c9081”
);
sprequestguid=(
“ead89a9e-f03b-7000-2805-6cd53e9c9081”
);
“x-content-type-options”=(
诺斯尼夫
);
“x帧选项”=(
萨米奥里金
);
“x-ms-invokeapp”=(
“1;仅限必读”
);
“x-msedge-ref”=(
“参考A:A4A5ACB248D94992BD7B83645B01A952参考B:BOM01EDGE0220参考C:2018-10-22T10:46:09Z”
);
“x-powered-by”=(
“ASP.NET”
);
} }
我的Android应用程序工作正常,因为缓冲区大小已在那里指定-
我认为这与Microsoft在文档中提到的缓冲区大小有关
将字节上载到上载会话
若要上载文件或文件的一部分,您的应用程序将进行PUT
请求createUploadSession中接收的uploadUrl值
答复。您可以上载整个文件,也可以将文件拆分为
多字节范围,与任何给定值中的最大字节相同
请求少于60个MiB
文件的片段必须按顺序上传。
按顺序上载片段将导致错误
注意:如果应用程序将文件拆分为多个字节范围,则
每个字节范围必须是320千字节(327680字节)的倍数。使用
碎片大小不能平均除以320千磅将导致
提交某些文件时出错
我不确定我在iOS中的会话上载任务中的哪一部分出错了,以及如何提供缓冲区大小。Hi,@suryakant,您是否尝试将文件拆分为多个?@SeiyaSu感谢您的响应。你能再详细说明一下你的方法吗?你有回应机构吗?希望这能提供一些详细信息,说明是什么导致了
400
响应。@Brad我能够使用此处提到的方法实现预期结果-github.com/jthake-msft/OneDrive-iOS-Swift-LargeFileUploader@Brad顺便说一句,使用这种方法,我无法在后台上传文件。有什么建议吗??