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

时间:2015-06-22 12:41:25

标签: javascript ajax rest sharepoint office365

我无法通过Microsoft的REST API(或至少是他们所谓的)在Office 365上运行的创建/上传文件。看起来我好像我能够进行身份验证,但是当我尝试创建文件时,我得到 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%(但不要求请求摘要)。

使用 POST https://examplecustomer.sharepoint.com/sites/examplesite/_api/contextinfo获取新请求摘要也会因 403 Forbidden 而失败。

我有X-RequestDigest(从登录后返回的页面)看似有效,我获得了FedAuthrtFa Cookie的值。

使用我发现的服务的大多数帮助来自互联网上的各种博客文章。在评论中,通常有一些说明同样的问题,但我还没有看到任何解决方案。

2 个答案:

答案 0 :(得分:2)

对我而言似乎有点亮,请访问technet上的此链接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
        }
    });
}

也;自从通过移动应用在线呼叫办公室后,您应该包括授权标题“Bearer<>”

答案 1 :(得分:1)

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

更改:

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

要:

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

我的诀窍! Not the first SPO认证突然改变让我失望。