Contact Support
Open document from One Drive
9 Jan 20247 minutes to read
To load a document from One Drive in a Document editor, you can follow the steps below
Step 1: Create the Microsoft graph API.
Need to create a Microsoft Graph API application and obtain the necessary credentials, namely the application ID and tenant ID. Follow the steps provided in the link to create the application and obtain the required IDs.
Step 2: Create a Simple Document Editor Sample in angular
Start by following the steps provided in this link to create a simple Document Editor sample in angular. This will give you a basic setup of the Document Editor component.
Step 3: Modify the DocumentEditorController.cs
File in the Web Service Project
-
Create a web service project in .NET Core 3.0 or above. You can refer to this linkfor instructions on how to create a web service project.
-
Open the
DocumentEditorController.cs
file in your web service project. -
Import the required namespaces at the top of the file:
using System.IO;
using Microsoft.Graph;
using Microsoft.Identity.Client;
using Helpers;
- Add the following private fields and constructor parameters to the
DocumentEditorController
class, In the constructor, assign the values from the configuration to the corresponding fields
private IConfiguration _configuration;
public readonly string folderName;
public readonly string applicationId;
public readonly string tenantId;
public DocumentEditorController(IWebHostEnvironment hostingEnvironment, IMemoryCache cache, IConfiguration configuration)
{
_hostingEnvironment = hostingEnvironment;
_cache = cache;
_configuration = configuration;
folderName = _configuration.GetValue<string>("FolderName");
tenantId = _configuration.GetValue<string>("TenantId");
applicationId = _configuration.GetValue<string>("ApplicationId");
}
- Create the
LoadFromOneDrive()
method to load the document from One Drive.
[AcceptVerbs("Post")]
[HttpPost]
[EnableCors("AllowAllOrigins")]
[Route("LoadFromBoxCloud")]
//Post action for Loading the documents
public async Task<string> LoadFromOneDrive([FromBody] Dictionary<string, string> jsonObject)
{
MemoryStream stream = new MemoryStream();
var config = LoadAppSettings();
var client = GetAuthenticatedGraphClient(config);
var request = client.Me.Drive.Root.Children.Request();
string folderIdToSearch = string.Empty;
var results = await request.GetAsync();
var folder = results.FirstOrDefault(f => f.Name == folderName && f.Folder != null);
if (folder != null)
{
// Save the matching folderId
folderIdToSearch = folder.Id;
}
var folderRequest = client.Me.Drive.Items[folderIdToSearch].Children.Request();
var folderContents = await folderRequest.GetAsync();
string fileIdToDownload = string.Empty;
var file = folderContents.FirstOrDefault(f => f.File != null && f.Name == objectName);
if (file != null)
{
// Save the matching fileId
fileIdToDownload = file.Id;
}
string fileIds = fileIdToDownload;
var fileRequest = client.Me.Drive.Items[fileIdToDownload].Content.Request();
using (var streamResponse = await fileRequest.GetAsync())
{
if (streamResponse != null)
{
streamResponse.Seek(0, SeekOrigin.Begin);
await streamResponse.CopyToAsync(stream);
}
}
WordDocument document = WordDocument.Load(stream, FormatType.Docx);
string json = Newtonsoft.Json.JsonConvert.SerializeObject(document);
document.Dispose();
stream.Close();
return json;
}
- Open the
appsettings.json
file in your web service project, Add the following lines below the existing"AllowedHosts"
configuration
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"TenantId": "Your_Tenant_ID",
"applApplicationIdicationId": "Your_Application_ID",
"FolderName": "Your_Folder_Name_To_Access_The_Files_In_Onedrive"
}
Replace Your_Tenent_ID, Your_Application_ID, and Your_Folder_Name_To_Access_The_Files_In_Onedrive with your actual tenant ID, application ID, and folder name.
Step 4: Modify the index File in the Document Editor sample
In the client-side, the document is returned from the web service is opening using open
method.
import { Component, OnInit, ViewChild } from '@angular/core';
import {
DocumentEditorContainerComponent,
ToolbarService,
} from '@syncfusion/ej2-angular-documenteditor';
@Component({
selector: 'app-root',
// specifies the template string for the DocumentEditorContainer component
template: `<button ejs-button (click)="load()" >Open Document From One Drive</button><ejs-documenteditorcontainer #documenteditor_default serviceUrl="http://localhost:62870/api/documenteditor/" height="600px" style="display:block" [enableToolbar]=true> </ejs-documenteditorcontainer>`,
providers: [ToolbarService],
})
export class AppComponent implements OnInit {
@ViewChild('documenteditor_default')
public container: DocumentEditorContainerComponent;
ngOnInit(): void {}
public load(): void {
let http: XMLHttpRequest = new XMLHttpRequest();
//add the documentName in which you want to open document inside the documentName
let content = { documentName: 'Getting Started.docx' };
let baseurl: string = 'http://localhost:62870/api/documenteditor/LoadFromOneDrive';
http.open('POST', baseurl, true);
http.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
http.onreadystatechange = () => {
if (http.readyState === 4) {
if (http.status === 200 || http.status === 304) {
//open the SFDT text in Document Editor
this.container.documentEditor.open(http.responseText);
}
}
};
http.send(JSON.stringify(content));
}
}
The following NuGet packages are required to use the previous code example
- Microsoft.Identity.Client
- Microsoft.Graph
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.FileExtensions
- Microsoft.Extensions.Configuration.Json
You can install these packages using the NuGet Package Manager in Visual Studio or Visual Studio Code.