javascript - 如何在站点和子站点之间使用 Sharepoint 2013 中的 Rest API 和 javascript 复制文件

标签 javascript rest sharepoint-2013

我需要在文档库之间复制文件。图书馆 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 上传文件。

  • 来源网站是一个适合附加“_api”休息端点
  • 的共享点站点
  • 源文件夹路径 是您的文档所在的相对文件夹路径
  • 源文件名 是文档的文件名
  • 目标网站 , 目标文件夹路径 目标文件名 是镜像或源,仅用于目标。
  • 请求文摘是您需要让 SharePoint 接受更新的特殊值。
    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/

    相关文章:

    javascript - 支持所有浏览器的 SVG 旋转

    java - ReSTLet 将 JSON 发布到 Appengine 错误

    sharepoint - 以编程方式访问 Sharepoint 2013 社区站点中的讨论和回复的值

    c# - 更新 sharepoint 2013 自定义列表的字段 "Modified"C#

    javascript,测试嵌套属性是否存在

    Javascript 遍历派生数组

    登录到数据库时,Django rest 框架不加密密码

    java - 带有 REST https 调用的客户端应用程序

    css3 - 使SharePoint具有响应能力- Bootstrap 还是媒体查询?

    javascript - 将内容移动到 View 中而不滚动容器