从iOS应用程序上载OneDrive Business上的文件失败

从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

我正在尝试使用graph API将文件从我的应用程序上载到OneDrive业务存储库

我知道有两个步骤可以做到这一点

  • 通过调用-
    https://graph.microsoft.com/v1.0/me/drive/root:/hello.docx:/createUploadSession
    (此api调用工作正常)

  • 上述API调用的响应是返回一个
    URL
    ,我正在使用该URL上载文件

  • 这就是我为这个API调用创建请求的方式-

    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顺便说一句,使用这种方法,我无法在后台上传文件。有什么建议吗??