2015-05-27 3 views
2

Я сделал приложение, размещенное в sharepoint, таким же образом с этой ссылкой https://code.msdn.microsoft.com/office/SharePoint-2013-Perform-ab9c4ae5#content с использованием REST. Мое приложение может отображать папки, файлы в выбранной папке, но когда я создаю новую папку или файл, она показывает ошибку: Запрещено. Я вошел в систему с учетной записью администратора. Пожалуйста, помогите проверить, почему, я знаю, что REST не нужен токен доступа. Здесь мой код (Файл App.js): 'use strict';Работа с папками и файлами в приложении, размещенном в Sharepoint

var context = SP.ClientContext.get_current(); 
var user = context.get_web().get_currentUser(); 
var hostweburl; 
var appweburl; 
var formdigest; 
(function() { 

    // This code runs when the DOM is ready and creates a context object which is 
    // needed to use the SharePoint object model 
    $(document).ready(function() { 
     getUserName(); 

     //Assign events to buttons 
     $("#createFolderButton").click(function (event) { 
      event.preventDefault(); 
      createFolder(); 

     }); 

     $("#deleteFolderButton").click(function (event) { 
      event.preventDefault(); 
      deleteFolder(); 
     }); 

     $("#createFileButton").click(function (event) { 
      event.preventDefault(); 
      createFile(); 
     }); 

     $("#deleteFileButton").click(function (event) { 
      event.preventDefault(); 
      deleteFile(); 
     }); 

     $("#getFileButton").click(function (event) { 
      event.preventDefault(); 
      getFile(); 
     }); 

     $("#updateFileButton").click(function (event) { 
      event.preventDefault(); 
      updateFile(); 
     }); 

    }); 

    // This function prepares, loads, and then executes a SharePoint query to get 
    // the current users information 
    function getUserName() { 
     context.load(user); 
     context.executeQueryAsync(onGetUserNameSuccess, onGetUserNameFail); 
    } 

    // This function is executed if the above call is successful 
    // It replaces the contents of the 'message' element with the user name 
    function onGetUserNameSuccess() { 
     $('#message').text('Hello ' + user.get_title()); 
    } 

    // This function is executed if the above call fails 
    function onGetUserNameFail(sender, args) { 
     alert('Failed to get user name. Error:' + args.get_message()); 
    } 

    //Get the URI decoded URLs. 
    hostweburl = 
     decodeURIComponent(
      getQueryStringParameter("SPHostUrl") 
    ); 
    appweburl = 
     decodeURIComponent(
      getQueryStringParameter("SPAppWebUrl") 
    ); 

    // Resources are in URLs in the form: 
    // web_url/_layouts/15/resource 
    var scriptbase = hostweburl + "/_layouts/15/"; 

    // Load the js file and continue to load the page with information 
    // about the site's folders and files. 
    $.getScript(scriptbase + "SP.RequestExecutor.js", loadPage); 

})(); 

function loadPage() { 
    getFormDigest(); 
    getFolders(); 
} 



//Folders 

//Retrieve all of the site's folders. 
function getFolders() { 
    var executor; 

    // Initialize the RequestExecutor with the app web URL. 
    executor = new SP.RequestExecutor(appweburl); 

    executor.executeAsync(
    { 
     url: 
      appweburl + 
      "/_api/SP.AppContextSite(@target)/web/[email protected]='" + 
      hostweburl + "'", 
     method: "GET", 
     headers: { "Accept": "application/json; odata=verbose" }, 
     success: getFoldersSuccessHandler, 
     error: getFoldersErrorHandler 
    } 
); 

} 

//Create a new folder. 
function createFolder() { 
    getFormDigest(); 
    var executor; 

    // Initialize the RequestExecutor with the app web URL. 
    executor = new SP.RequestExecutor(appweburl); 
    var createFolderBox = document.getElementById("createFolderBox"); 
    var serverRelativeUrl = createFolderBox.value; 

    var metadata = "{ '__metadata': { 'type': 'SP.Folder' }, 'ServerRelativeUrl': '" + serverRelativeUrl + "'}" 

    executor.executeAsync(
    { 
     url: 
      appweburl + 
      "/_api/SP.AppContextSite(@target)/web/[email protected]='" + 
      hostweburl + "'", 
     method: "POST", 
     body: metadata, 
     headers: { "Accept": "application/json; odata=verbose", "content-type": "application/json; odata=verbose", "X-RequestDigest": formdigest, "content-length": metadata.length }, 
     success: createFolderSuccessHandler, 
     error: createFolderErrorHandler 
    } 
); 

} 

//Delete the selected folder. 
function deleteFolder() { 
    getFormDigest(); 
    var executor; 

    // Initialize the RequestExecutor with the app web URL. 
    executor = new SP.RequestExecutor(appweburl); 

    var selectFolderBox = document.getElementById("selectFolderBox"); 
    var selectedFolder = selectFolderBox.value; 

    executor.executeAsync(
    { 
     url: 
      appweburl + 
      "/_api/SP.AppContextSite(@target)/web/GetFolderByServerRelativeUrl('" + selectedFolder + "')[email protected]='" + 
      hostweburl + "'", 
     method: "POST", 
     headers: { "Accept": "application/json; odata=verbose", "X-RequestDigest": formdigest, "X-HTTP-Method":"DELETE", "IF-MATCH":"*" }, 
     success: deleteFolderSuccessHandler, 
     error: deleteFolderErrorHandler 
    } 
); 
} 

//Files 

//Retrieve all of the files for the selected folder. 
function getFiles() { 
    var executor; 

    // Initialize the RequestExecutor with the app web URL. 
    executor = new SP.RequestExecutor(appweburl); 

    var selectFolderBox = document.getElementById("selectFolderBox"); 
    var selectedFolder = selectFolderBox.value; 

    executor.executeAsync(
    { 
     url: 
      appweburl + 
      "/_api/SP.AppContextSite(@target)/web/GetFolderByServerRelativeUrl('" + selectedFolder + "')/[email protected]='" + 
      hostweburl + "'", 
     method: "GET", 
     headers: { "Accept": "application/json; odata=verbose" }, 
     success: getFilesSuccessHandler, 
     error: getFilesErrorHandler 
    } 
); 
} 

//Create a new file. 
function createFile() { 
    getFormDigest(); 
    var executor; 

    // Initialize the RequestExecutor with the app web URL. 
    executor = new SP.RequestExecutor(appweburl); 
    var selectFolderBox = document.getElementById("selectFolderBox"); 
    var serverRelativeUrl = selectFolderBox.value; 
    var fileUrl = createFileBox.value; 
    var fileContent = submitTextFile.value; 

    executor.executeAsync(
{ 
    url: 
     appweburl + 
     "/_api/SP.AppContextSite(@target)/web/GetFolderByServerRelativeUrl('" + serverRelativeUrl + "')/Files/add(url='" + fileUrl + "',overwrite='true')[email protected]='" + 
     hostweburl + "'", 
    method: "POST", 
    body: fileContent, 
    headers: { "Accept": "application/json; odata=verbose", "X-RequestDigest": formdigest, "content-length": fileContent.length }, 
    success: createFileSuccessHandler, 
    error: createFileErrorHandler 
} 
); 
} 

//Update a file. 
function updateFile() { 
    getFormDigest(); 
    var executor; 

    // Initialize the RequestExecutor with the app web URL. 
    executor = new SP.RequestExecutor(appweburl); 
    var selectFolderBox = document.getElementById("selectFolderBox"); 
    var serverRelativeUrl = selectFolderBox.value; 
    var fileUrl = selectFileBox.value; 
    var fileContent = submitTextFile.value; 

    executor.executeAsync(
{ 
    url: 
     appweburl + 
     "/_api/SP.AppContextSite(@target)/web/GetFileByServerRelativeUrl('" + serverRelativeUrl + "/" + fileUrl + "')/[email protected]='" + 
     hostweburl + "'", 
    method: "POST", 
    body: fileContent, 
    headers: { "Accept": "application/json; odata=verbose", "X-RequestDigest": formdigest, "content-length": fileContent.length, "X-HTTP-Method":"PUT" }, 
    success: updateFileSuccessHandler, 
    error: updateFileErrorHandler 
} 
); 
} 

//Retrieve the selected file and save it locally. 
function getFile() { 
    var executor; 

    // Initialize the RequestExecutor with the app web URL. 
    executor = new SP.RequestExecutor(appweburl); 
    var selectFolderBox = document.getElementById("selectFolderBox"); 
    var selectFileBox = document.getElementById("selectFileBox"); 
    var serverRelativeUrl = selectFolderBox.value; 
    var fileUrl = selectFileBox.value; 

    executor.executeAsync(
{ 
    url: 
     appweburl + 
     "/_api/SP.AppContextSite(@target)/web/GetFileByServerRelativeUrl('" + serverRelativeUrl + "/" + fileUrl + "')/[email protected]='" + 
     hostweburl + "'", 
    method: "GET", 
    headers: { "Accept": "application/json; odata=verbose" }, 
    success: getFileSuccessHandler, 
    error: getFileErrorHandler 
} 
); 
} 

//Delete a file. 
function deleteFile() { 
    getFormDigest(); 
    var executor; 

    // Initialize the RequestExecutor with the app web URL. 
    executor = new SP.RequestExecutor(appweburl); 
    var selectFolderBox = document.getElementById("selectFolderBox"); 
    var selectFileBox = document.getElementById("selectFileBox"); 
    var serverRelativeUrl = selectFolderBox.value; 
    var fileUrl = selectFileBox.value; 

    executor.executeAsync(
{ 
    url: 
     appweburl + 
     "/_api/SP.AppContextSite(@target)/web/GetFileByServerRelativeUrl('" + serverRelativeUrl + "/" + fileUrl + "')[email protected]='" + 
     hostweburl + "'", 
    method: "POST", 
    headers: { "Accept": "application/json; odata=verbose", "X-RequestDigest": formdigest, "X-HTTP-Method":"DELETE", "IF-MATCH":"*" }, 
    success: deleteFileSuccessHandler, 
    error: deleteFileErrorHandler 
} 
); 

} 

//Success Handlers 


//Store the value of the form digest. 
function contextSuccessHandler(data) { 
    var jsonObject = JSON.parse(data.body); 
    formdigest = jsonObject.d.GetContextWebInformation.FormDigestValue; 
} 

//Populate the selectFolderBox control after retrieving all of the site's folders. 
function getFoldersSuccessHandler(data) { 
    var jsonObject = JSON.parse(data.body); 
    var selectFolderBox = document.getElementById("selectFolderBox"); 

    if (selectFolderBox.hasChildNodes()) { 
     while (selectFolderBox.childNodes.length >= 1) { 
      selectFolderBox.removeChild(selectFolderBox.firstChild); 
     } 
    } 

    var results = jsonObject.d.results; 
    for (var i = 0; i < results.length; i++) { 
     var selectOption = document.createElement("option"); 
     selectOption.value = results[i].Name; 
     selectOption.innerText = results[i].Name; 
     selectFolderBox.appendChild(selectOption); 
    } 
    getFiles(); 
} 

//Save the file locally after it has been retrieved. 
function getFileSuccessHandler(data) { 
    var selectFileBox = document.getElementById("selectFileBox"); 
    var selectedFile = selectFileBox.value; 
    save_content_to_file(data.body, selectedFile); 

} 

//Populate the selectFileBox control after retrieving all of the files in the selected folder. 
function getFilesSuccessHandler(data) { 
    var jsonObject = JSON.parse(data.body); 
    var selectFileBox = document.getElementById("selectFileBox"); 

    if (selectFileBox.hasChildNodes()) { 
     while (selectFileBox.childNodes.length >= 1) { 
      selectFileBox.removeChild(selectFileBox.firstChild); 
     } 
    } 


    var results = jsonObject.d.results; 
    for (var i = 0; i < results.length; i++) { 
     var selectOption = document.createElement("option"); 
     selectOption.value = results[i].Name; 
     selectOption.innerText = results[i].Name; 
     selectFileBox.appendChild(selectOption); 
    } 

} 

//Reload the page information after creating a new folder. 
function createFolderSuccessHandler(data) { 
    getFolders(); 
    getFiles(); 
} 

//Reload the page information after deleting a folder. 
function deleteFolderSuccessHandler(data) { 
    getFolders(); 
    getFiles(); 
} 

//Reload the files after creating a new file. 
function createFileSuccessHandler(data) { 
    getFiles(); 
} 

//Reload the files after deleting a file. 
function deleteFileSuccessHandler(data) { 
    getFiles(); 
} 

//Reload the files after updating a file. 
function updateFileSuccessHandler(data) { 
    getFiles(); 
} 


//Error handlers 

function createFolderErrorHandler(data, errorCode, errorMessage) { 
    alert("Could not create folder: " + errorMessage); 
} 

function deleteFolderErrorHandler(data, errorCode, errorMessage) { 
    alert("Could not delete folder: " + errorMessage); 
} 

function getFoldersErrorHandler(data, errorCode, errorMessage) { 
    alert("Could not get folders: " + errorMessage); 
} 

function getFilesErrorHandler(data, errorCode, errorMessage) { 
    alert("Could not get files: " + errorMessage); 
} 

function contextErrorHandler(data, errorCode, errorMessage) { 
    alert("Could not get context info: " + errorMessage); 
} 

function deleteFileErrorHandler(data, errorCode, errorMessage) { 
    alert("Could not delete file: " + errorMessage); 
} 

function createFileErrorHandler(data, errorCode, errorMessage) { 
    alert("Could not create file: " + errorMessage); 
} 

function updateFileErrorHandler(data, errorCode, errorMessage) { 
    alert("Could not update file: " + errorMessage); 
} 

function getFileErrorHandler(data, errorCode, errorMessage) { 
    alert("Could not get file: " + errorMessage); 
} 


//Utilities 

// Retrieve a query string value. 
// For production purposes you may want to use 
// a library to handle the query string. 
function getQueryStringParameter(paramToRetrieve) { 
    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] == paramToRetrieve) 
      return singleParam[1]; 
    } 
} 

//Retrieve the form digest value. 
function getFormDigest() { 
    var executor; 

    // Initialize the RequestExecutor with the app web URL. 
    executor = new SP.RequestExecutor(appweburl); 

    executor.executeAsync(
     { 
      url: 
       appweburl + 
       "/_api/contextinfo", 
      method: "POST", 
      headers: { "Accept": "application/json; odata=verbose" }, 
      success: contextSuccessHandler, 
      error: contextErrorHandler 
     } 
    ); 

} 


//Save the contents of a file to a file on the local computer. 

function save_content_to_file(content, filename) { 
    var dlg = false; 

     document.ir = document.createElement('iframe'); 
     document.ir.id = 'ifr'; 
     document.ir.location = 'about.blank'; 
     document.ir.style.display = 'none'; 
     document.body.appendChild(document.ir); 
     var childdoc= document.getElementById('ifr').contentWindow.document; 
      childdoc.open("text/plain", "replace"); 
      childdoc.charset = "utf-8"; 
      childdoc.write(content); 
      childdoc.close(); 
      childdoc.document.charset = "utf-8"; 
      dlg = childdoc.execCommand('SaveAs', false, filename); 
     document.body.removeChild(document.ir); 

    return dlg; 
} 

Спасибо!

+0

Вы можете получить доступ к адресу '/ _api/... 'из своего браузера, не получив запрет 401 или Запретить 403? –

+0

Да, я могу получить доступ к/_api/... как я упоминаю: мое приложение может получить папки, файлы, которые он показывает на экране, но когда я создаю папку или файл, она показывает ошибку Forbidden. –

ответ

0

Имеет ли ваша надстройка права на запись на сайте, где вы пытаетесь создать папку?

Результирующие разрешения кода (или запроса REST) ​​- это пересечение разрешений надстройки и текущих разрешений пользователя.

Смежные вопросы