无法通过 REST 将文件上传到 Sharepoint @ Office 365

Unable to upload file to Sharepoint @ Office 365 via REST

我在 Office 365 上通过 Microsoft 的 REST API(或者至少他们这样称呼)creating/uploading 文件时遇到问题 运行ning。看起来我我能够正常进行身份验证,但是当我尝试创建文件时遇到 403 Forbidden。同一用户可以使用该网站上传文件。

我一直在使用的代码可以在 http://jsfiddle.net/Lw8hcyda/5/ 上看到。 (请注意,如果您尝试在浏览器中 运行 ,您需要允许跨域请求。)

    $.ajax({
        url: 'https://examplecustomer.sharepoint.com/sites/examplesite/_api/web/GetFolderByServerRelativeUrl(\'/sites/examplesite/Documents/images\')/Files/add(url=\'testing-rest.txt\',overwrite=true)',
        type: 'POST',
        data: 'contents',
        headers: {
            'X-RequestDigest': digest
        },
        success: function (data, textStatus, jqXhr) {
            console.log('File created. :-D');
        },
        error: function (jqXhr, textStatus, errorThrown) {
            console.log('Failed to create file. Got status [' + textStatus + '] and error [' + errorThrown + '].');
        }
    });

使用 GET 列出文件到 https://examplecustomer.sharepoint.com/sites/examplesite/_api/web/GetFolderByServerRelativeUrl('/sites/examplesite/Documents/images')/Files 100% 有效(但这不需要请求摘要)。

使用 POSThttps://examplecustomer.sharepoint.com/sites/examplesite/_api/contextinfo 获取新的请求摘要也失败并显示 403 Forbidden.

我有一个似乎有效的 X-RequestDigest(来自登录后返回的页面),我得到了 FedAuthrtFa cookie 的值。

我发现的有关使用服务的大部分帮助都是来自 Internet 的各种博客文章。在评论中,通常会有一些讲述相同的问题,但我还没有看到任何解决方案。

对我来说这似乎有点简单,请访问 technet 上的 link https://msdn.microsoft.com/en-us/library/office/dn769086.aspx,并将您的上传功能与此进行比较:

// Add the file to the file collection in the Shared Documents folder.
function addFileToFolder(arrayBuffer) {

    // Get the file name from the file input control on the page.
    var parts = fileInput[0].value.split('\');
    var fileName = parts[parts.length - 1];

    // Construct the endpoint.
    var fileCollectionEndpoint = String.format(
        "{0}/_api/sp.appcontextsite(@target)/web/getfolderbyserverrelativeurl('{1}')/files" +
        "/add(overwrite=true, url='{2}')?@target='{3}'",
        appWebUrl, serverRelativeUrlToFolder, fileName, hostWebUrl);

    // Send the request and return the response.
    // This call returns the SharePoint file.
    return jQuery.ajax({
        url: fileCollectionEndpoint,
        type: "POST",
        data: arrayBuffer,
        processData: false,
        headers: {
            "accept": "application/json;odata=verbose",
            "X-RequestDigest": jQuery("#__REQUESTDIGEST").val(),
            "content-length": arrayBuffer.byteLength
        }
    });
}

还有;由于从移动应用程序在线呼叫办公室,您应该包括授权 header "Bearer <>"

正如 JakobN 和 JoyS 在评论中指出的那样:

变化中:

headers: {
    'X-RequestDigest': digest
},

收件人:

headers: {
    'Authorization': 'Bearer '+digest
},

对我有用! Not the first SPO 身份验证的突然变化让我失望。