I am trying to upload PDF document created dynamically using angularJS and PDFmake(js library) to SharePoint library using REST API, but the PDF document uploaded to the document library has 0KB and when i tried to open it shows error "Failed to open".
While using var doc = pdfMake.createPdf(docDefinition).download(); it works, but when i tried to upload "baseService.fileUploadRequest(doc.getBuffer(), url);" using this it uploads the empty pdf file to SharePoint.
Flow : HTML button click -> Controller -> Service -> BaseSvc
Controller:
$scope.uploadPdf = function ($location) {
var employees = $scope.people;
var empList = [];
angular.forEach(employees, function(value, key) {
empList.push({Firstname: value.FirstName, Lastname: value.LastName, Address: value.Address});
});
var items = empList.map(function(item) {
return [item.Firstname, item.Lastname, item.Address];
});
var docDefinition = {
pageOrientation: 'landscape',
content: [
{ text: 'Employees List'},
{
style: 'styleTable',
table:
{
body:
[
[{ text: 'Firstname', style: 'header' },
{ text: 'Lastname' , style: 'header' },
{ text: 'Address' , style: 'header' },
],
].concat(items)
}
}
],
styles: {
header: {
bold: true,
color: '#000',
fontSize: 11
},
styleTable: {
color: '#666',
fontSize: 10
}
}
};
var doc = pdfMake.createPdf(docDefinition);
peopleService.fileUpload(doc)
.then(function (response) {
console.log(response);
$location.path("/");
});
};
}]);
})();
Service:
"use strict";
(function(){
angular.module("peopleApp")
.factory("peopleService",["baseSvc",function(baseService){
var listEndPoint = '/_api/web/lists';
var fileUpload = function(doc){
var url = "/_api/web/lists/GetByTitle('Documents')/RootFolder/Files/add(url='EmployeesDetails.pdf', overwrite=true)";
return baseService.fileUploadRequest(doc.getBuffer(), url);
};
return{
fileUpload:fileUpload
};
}]);
})();
BaseSvc:
"use strict";
(function () {
angular.module("peopleApp")
.factory("baseSvc", ["$http", "$q", function ($http, $q) {
var baseUrl = _spPageContextInfo.webAbsoluteUrl;
var fileUploadRequest = function(databuffer, url) {
var deferred = $q.defer();
$http({
url: baseUrl + url,
method: "POST",
processData: false,
data: databuffer,
transformRequest: angular.identity,
headers: {
"accept": "application/json;odata=verbose",
"X-RequestDigest": document.getElementById("__REQUESTDIGEST").value,
"Content-Type": undefined,
"content-length": databuffer.byteLength
}
}).success(function(result) {
deferred.resolve(result);
}).error(function(result, status) {
deferred.reject({
error: result,
status: status
});
});
return deferred.promise;
};
return {
fileUploadRequest: fileUploadRequest
};
}]);
})();