无法通过 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% 有效(但这不需要请求摘要)。
使用 POST 到 https://examplecustomer.sharepoint.com/sites/examplesite/_api/contextinfo
获取新的请求摘要也失败并显示 403 Forbidden.
我有一个似乎有效的 X-RequestDigest
(来自登录后返回的页面),我得到了 FedAuth
和 rtFa
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 身份验证的突然变化让我失望。
我在 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% 有效(但这不需要请求摘要)。
使用 POST 到 https://examplecustomer.sharepoint.com/sites/examplesite/_api/contextinfo
获取新的请求摘要也失败并显示 403 Forbidden.
我有一个似乎有效的 X-RequestDigest
(来自登录后返回的页面),我得到了 FedAuth
和 rtFa
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 身份验证的突然变化让我失望。