我无法通过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
(从登录后返回的页面)看似有效,我获得了FedAuth
和rtFa
Cookie的值。
使用我发现的服务的大多数帮助来自互联网上的各种博客文章。在评论中,通常有一些说明同样的问题,但我还没有看到任何解决方案。
答案 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认证突然改变让我失望。