访问被拒绝,SharePoint应用程序。将文件复制到另一个网站集

时间:2015-06-20 16:35:02

标签: sharepoint sharepoint-2013 sharepoint-apps

更新:我现在明白,通过在Web范围内安装应用程序,它只能访问hostweb和appweb。所以我尝试批量安装应用程序 - 现在APP工作。 但是,App部分除App应用程序目录外不可用。 是否有人知道如何将应用程序部分权限授予其他网站集,或批量安装应用程序部件以使其在应用程序目录以外的其他位置可用?

使用此代码从一个网站集中下载文件,然后尝试将其上传到另一个网上共享点。

我得到了一个不允许上传文件的403。下载很好。 有人有任何线索吗?

var web;
var hostweburl;
var appweburl;

$(document).ready(function () {
    sharePointReady();
});

function sharePointReady() {
    hostweburl =
         decodeURIComponent(
             getQueryStringParameter('SPHostUrl')
     );
    appweburl =
        decodeURIComponent(
            getQueryStringParameter('SPAppWebUrl')
     );

    var scriptbase = hostweburl + '/_layouts/15/';

    $.getScript(scriptbase + 'SP.Runtime.js',
        function () {
            $.getScript(scriptbase + 'SP.js',
                function () { $.getScript(scriptbase + 'SP.RequestExecutor.js', copyAndUploadFile); }
            );
        }
    );
}

function getQueryStringParameter(param) {
    var params = document.URL.split("?")[1].split("&");
    var strParams = "";
    for (var i = 0; i < params.length; i = i + 1) {
        var singleParam = params[i].split("=");
        if (singleParam[0] == param) {
            return singleParam[1];
        }
    }
}

function copyAndUploadFile() {
    var targetUrl = "https://sogetiumea-my.sharepoint.com/personal/simonagren_sogetiumea_onmicrosoft_com";

    var executor = new SP.RequestExecutor(appweburl);

    var fileContentUrl = "_api/SP.AppContextSite(@target)/web/GetFileByServerRelativeUrl('/_catalogs/theme/15/fontscheme003.spfont')/$value?@target='" + hostweburl + "'";
    var fileTargetUrl = "_api/SP.AppContextSite(@target)/web/GetFolderByServerRelativeUrl('_catalogs/theme/15')/Files/Add(url='fontscheme003.spfont', overwrite=true)?@target='" + targetUrl + "'";




    $.ajax({
        url: "_api/contextinfo",
        type: "POST",
        contentType: "application/x-www-url-encoded",
        dataType: "json",
        headers: {
            "Accept": "application/json; odata=verbose",
        },
        success: function (data) {
            var digest = data.d.GetContextWebInformation.FormDigestValue;

            var getFileAction = {
                url: fileContentUrl,
                method: "GET",
                binaryStringResponseBody: true,
                success: function (getFileData) {
                    var results = data.body;

                    var copyFileAction = {
                        url: fileTargetUrl,
                        method: "POST",
                        headers: {
                            "Accept": "application/json;odata=verbose",
                            "X-RequestDigest": digest
                        },
                        contentType: "application/json;odata=vebose",
                        binaryStrinRequestBody: true,
                        body: getFileData.body,
                        success: function (copyFileData) {
                            alert("kopiering gick bra");
                        },
                        error: function (ex) {
                            alert(JSON.stringify(ex));
                        }

                    };
                    executor.executeAsync(copyFileAction);
                },
                error: function (ex) {
                    alert(JSON.stringify(ex));

                }
            };
            executor.executeAsync(getFileAction);
        },
        error: function (ex) {
            alert(JSON.stringify(ex));

        }
    });



}

1 个答案:

答案 0 :(得分:0)

我使用了排序方法。

  1. 我将应用程序部分添加到应用程序目录中,并使用硬编码值到mysite网站集(用作下载/复制文件的源)。
  2. 使用开发者工具我复制了用于在应用目录中显示应用部分的iframe的html。
  3. 我在mysites根网站集上激活了发布。
  4. 我添加了一个脚本编写者webpart。然后我添加了复制的iframe代码。 Voila,现在是“应用程序部分”。

    • 首先,应用程序会侦听当前用户,检查是否存在个人网站,否则会创建该用户。
    • 将mysus“_catalogs / theme / 15”中的cusom spcolor文件复制到当前用户个人网站的同一文件夹中。
    • 在“Applytheme”中应用spcolor文件。
  5. 这是基于Vesa使用提供商托管应用程序的想法!