我需要在文档库之间复制文件。图书馆 A 位于一个站点,图书馆 B 位于子站点。我知道如何在同一级别的库之间复制文件,但问题在于不同级别之间的复制。
我用来在同一级别的库之间复制文件的代码。
$.ajax({
url : "http://xxx/PWA/_api/web/folders/GetByUrl('/PWA/CopyFromLibrary')/Files/getbyurl('Import.csv')/copyTo(strNewUrl = '/PWA/TargetLibrary/Import.csv',bOverWrite = true)",
method: 'POST',
headers: {
"Accept": "application/json; odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: function () {
alert("Success! Your file was copied properly");
},
error: function () {
alert("Problem with copying");
}
});
对于不同的级别,我只使用另一个目标 URL:
url : "http://xxx/PWA/_api/web/folders/GetByUrl('/PWA/CopyFromLibrary')/Files/getbyurl('Import.csv')/copyTo(strNewUrl = '/PWA/Subsite/TargetLibrary/Import.csv',bOverWrite = true)",
它不起作用。
如何解决这个问题?
最佳答案
今天刚刚为跨站点解决方案解决了这个问题。诀窍是——不要使用 $.ajax 来下载文档。使用良好的旧 XMLHttpRequest。原因是 JQuery 根本不允许您从 SharePoint 获取原始二进制数据数组。但是,XMLHttpRequest 之所以这样做,是因为它允许您将数组缓冲区作为其实现的一部分,SharePoint 接受!
以下是包含用于构建完整源和目标 REST url 的部分的代码。请注意,您可以使用 $.ajax 上传文件。
function copyDocument(sourceSite, sourceFolderPath, sourceFileName, targetSite, targetFolderPath, targetFileName, requestDigest) {
var sourceSiteUrl = sourceSite + "_api/web/GetFolderByServerRelativeUrl('" + sourceFolderPath + "')/Files('" + sourceFileName + "')/$value";
var targetSiteUrl = targetSite + "_api/web/GetFolderByServerRelativeUrl('" + targetFolderPath + "')/Files/Add(url='" + targetFileName + "',overwrite=true)";
var xhr = new XMLHttpRequest();
xhr.open('GET', sourceSiteUrl, true);
xhr.setRequestHeader('binaryStringResponseBody', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function (e) {
if (this.status == 200) {
var arrayBuffer = this.response;
$.ajax({
url: targetSiteUrl,
method: 'POST',
data: arrayBuffer,
processData: false,
headers: { 'binaryStringRequestBody': 'true', 'Accept': 'application/json;odata=verbose;charset=utf-8', 'X-RequestDigest': requestDigest }
})
.done(function (postData) {
console.log('we did it!');
})
.fail(function (jqXHR, errorText) {
console.log('dadgummit');
});
}
}
xhr.send();
}
关于javascript - 如何在站点和子站点之间使用 Sharepoint 2013 中的 Rest API 和 javascript 复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16942008/