How to Upload File in Document Library in SharePoint Using REST API & jQuery

Develop the project using the following method in the NAPA Tool.

On your Developer Site, open the "Napa" Office 365 Development Tools and then choose Add New Project.

  • Choose the App for SharePoint template, name the project. Create the site and then choose the Create button.
  • Replace APP.js with the following source code.
  • Publish Your App.

Prerequisites

The following are important steps to be done before creating the app.

Specify the permissions that your app needs as in the following.

Choose the Properties button at the bottom of the page.

  • In the Properties window, choose Permissions.
  • In the Content category, set the Write permissions for the Tenant scope.
  • In the Social category, set the Read permissions for the User Profiles scope.
  • Close the Properties window.

Default ASPX


  1. <input id="getFile" type="file"/><br />  
  2. <input id="displayName" type="text" value="Enter a unique name" /><br />  
  3. <input id="addFileButton" type="button" value="Upload" onclick="uploadFile()"/>  
Source Code
  1. 'use strict';  
  2.   
  3. var appWebUrl, hostWebUrl;  
  4.   
  5. $(document).ready(function () 
  6. {  
  7.   
  8.     // Check for FileReader API (HTML5) support.  
  9.     if (!window.FileReader) {  
  10.         alert(' FileReader API does not support Your Current Browser.');  
  11.     }  
  12.   
  13.     // Get the app web and host web URLs.  
  14.     appWebUrl = decodeURIComponent(getQueryStringParameter("SPAppWebUrl"));  
  15.     hostWebUrl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));  
  16. });  
  17.   
  18. // Upload the file.  
  19. // You can upload files up to 2 GB with the REST API.  
  20. function uploadFile() 
  21. {  
  22.   
  23.     // Define the folder path for this example.  
  24.     var serverRelativeUrlToFolder = '/sites/apps/shared documents';  
  25.   
  26.     // Get test values from the file input and text input page controls.  
  27.     // The display name must be unique every time you run the example.  
  28.     var fileInput = $('#getFile');  
  29.     var newName = $('#displayName').val();  
  30.   
  31.     // Initiate method calls using jQuery promises.  
  32.     // Get the local file as an array buffer.  
  33.     var getFile = getFileBuffer();  
  34.     getFile.done(function (arrayBuffer) {  
  35.   
  36.         // Add the file to the SharePoint folder.  
  37.         var addFile = addFileToFolder(arrayBuffer);  
  38.         addFile.done(function (file, status, xhr) {  
  39.   
  40.             // Get the list item that corresponds to the uploaded file.  
  41.             var getItem = getListItem(file.d.ListItemAllFields.__deferred.uri);  
  42.             getItem.done(function (listItem, status, xhr) {  
  43.   
  44.                 // Change the display name and title of the list item.  
  45.                 var changeItem = updateListItem(listItem.d.__metadata);  
  46.                 changeItem.done(function (data, status, xhr) {  
  47.                     alert('file uploaded successfully in Library);  
  48.                 });  
  49.                 changeItem.fail(onError);  
  50.             });  
  51.             getItem.fail(onError);  
  52.         });  
  53.         addFile.fail(onError);  
  54.     });  
  55.     getFile.fail(onError);  
  56.   
  57.     // Get the local file as an array buffer.  
  58.     function getFileBuffer()   
  59.     {  
  60.         var deferred = jQuery.Deferred();  
  61.         var reader = new FileReader();  
  62.         reader.onloadend = function (e) {  
  63.             deferred.resolve(e.target.result);  
  64.         }  
  65.         reader.onerror = function (e) {  
  66.             deferred.reject(e.target.error);  
  67.         }  
  68.         reader.readAsArrayBuffer(fileInput[0].files[0]);  
  69.         return deferred.promise();  
  70.     }  
  71.   
  72.     // Add the file to the file collection in the Shared Documents folder.  
  73.     function addFileToFolder(arrayBuffer)   
  74.     {  
  75.   
  76.         // Get the file name from the file input control on the page.  
  77.         var parts = fileInput[0].value.split('\\');  
  78.         var fileName = parts[parts.length - 1];  
  79.   
  80.         // Construct the endpoint.  
  81.         var fileCollectionEndpoint = String.format(  
  82.             "{0}/_api/sp.appcontextsite(@target)/web/getfolderbyserverrelativeurl('{1}')/files" +  
  83.             "/add(overwrite=true, url='{2}')?@target='{3}'",  
  84.             appWebUrl, serverRelativeUrlToFolder, fileName, hostWebUrl);  
  85.   
  86.         // Send the request and return the response.  
  87.         // This call returns the SharePoint file.  
  88.         return $.ajax({  
  89.             url: fileCollectionEndpoint,  
  90.             type: "POST",  
  91.             data: arrayBuffer,  
  92.             processData: false,  
  93.             headers: {  
  94.                 "accept""application/json;odata=verbose",  
  95.                 "X-RequestDigest": jQuery("#__REQUESTDIGEST").val(),  
  96.                 "content-length": arrayBuffer.byteLength  
  97.             }  
  98.         });  
  99.     }  
  100.   
  101.     // Get the list item that corresponds to the file by calling the file's ListItemAllFields property.  
  102.     function getListItem(fileListItemUri)   
  103.     {  
  104.   
  105.         // Construct the endpoint.  
  106.         // The list item URI uses the host web, but the cross-domain call is sent to the  
  107.         // app web and specifies the host web as the context site.  
  108.         fileListItemUri = fileListItemUri.replace(hostWebUrl, '{0}');  
  109.         fileListItemUri = fileListItemUri.replace('_api/Web''_api/sp.appcontextsite(@target)/web');  
  110.           
  111.         var listItemAllFieldsEndpoint = String.format(fileListItemUri + "?@target='{1}'",  
  112.             appWebUrl, hostWebUrl);  
  113.   
  114.         // Send the request and return the response.  
  115.         return $.ajax({  
  116.             url: listItemAllFieldsEndpoint,  
  117.             type: "GET",  
  118.             headers: { "accept""application/json;odata=verbose" }  
  119.         });  
  120.     }  
  121.   
  122.     // Change the display name and title of the list item.  
  123.     function updateListItem(itemMetadata) 
  124.     {  
  125.   
  126.         // Construct the endpoint.  
  127.         // Specify the host web as the context site.  
  128.         var listItemUri = itemMetadata.uri.replace('_api/Web''_api/sp.appcontextsite(@target)/web');  
  129.         var listItemEndpoint = String.format(listItemUri + "?@target='{0}'", hostWebUrl);  
  130.   
  131.         // Define the list item changes. Use the FileLeafRef property to change the display name.   
  132.         // For simplicity, also use the name as the title.  
  133.         // The example gets the list item type from the item's metadata, but you can also get it from the  
  134.         // ListItemEntityTypeFullName property of the list.  
  135.         var body = String.format("{{'__metadata':{{'type':'{0}'}},'FileLeafRef':'{1}','Title':'{2}'}}",  
  136.             itemMetadata.type, newName, newName);  
  137.   
  138.         // Send the request and return the promise.  
  139.         // This call does not return response content from the server.  
  140.         return $.ajax({  
  141.             url: listItemEndpoint,  
  142.             type: "POST",  
  143.             data: body,  
  144.             headers: {  
  145.                 "X-RequestDigest": jQuery("#__REQUESTDIGEST").val(),  
  146.                 "content-type""application/json;odata=verbose",  
  147.                 "content-length": body.length,  
  148.                 "IF-MATCH": itemMetadata.etag,  
  149.                 "X-HTTP-Method""MERGE"  
  150.             }  
  151.         });  
  152.     }  
  153. }  
  154.   
  155. // Display error messages.   
  156. function onError(error)   
  157. {  
  158.     alert(error.responseText);  
  159. }  
  160.   
  161. // Get parameters from the query string.  
  162. // For production purposes you may want to use a library to handle the query string.  
  163. function getQueryStringParameter(paramToRetrieve)  
  164. {  
  165.     var params = document.URL.split("?")[1].split("&");  
  166.     for (var i = 0; i < params.length; i = i + 1) {  
  167.         var singleParam = params[i].split("=");  
  168.         if (singleParam[0] == paramToRetrieve) return singleParam[1];  
  169.     }  
  170. }  
Publish

Publish the App and click the Trust it Button.


Output

File uploaded successfully in Document Library.



Reference: MSDN

I hope you liked this article.