Open document from Azure Blob Storage
To load document from Azure Blob Storage in a Document Editor, you can follow the steps below
Step 1: Create a Simple Document Editor Sample in React
Start by following the steps provided in this link to create a simple Document Editor sample in react. This will give you a basic setup of the Document Editor component.
Step 2: 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 link for instructions on how to create a web service project.
-
Open the
DocumentEditorController.csfile in your web service project. -
Import the required namespaces at the top of the file:
using System.IO;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Specialized;- Add the following private fields and constructor parameters to the
DocumentEditorControllerclass, In the constructor, assign the values from the configuration to the corresponding fields
private readonly string _storageConnectionString;
private readonly string _storageContainerName;
private readonly ILogger<DocumentEditorController> _logger;
public DocumentEditorController(IConfiguration configuration, ILogger<DocumentEditorController> logger)
{
_storageConnectionString = configuration.GetValue<string>("connectionString");
_storageContainerName = configuration.GetValue<string>("containerName");
_logger = logger;
}- Modify the
LoadFromAzure()method to load the document from Azure Blob Storage
[HttpPost("LoadFromAzure")]
[Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")]
[Route("[controller]/LoadFromAzure")]
//Post action for Loading the PDF documents
public IActionResult LoadFromAzure([FromBody] Dictionary<string, string> jsonObject)
{
MemoryStream stream = new MemoryStream();
if (jsonObject == null && !jsonObject.ContainsKey("documentName"))
{
return null;
}
BlobServiceClient blobServiceClient = new BlobServiceClient(_storageConnectionString);
string fileName = jsonObject["documentName"];
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(_storageContainerName);
BlockBlobClient blockBlobClient = containerClient.GetBlockBlobClient(fileName);
blockBlobClient.DownloadTo(stream);
WordDocument document = WordDocument.Load(stream, FormatType.Docx);
string json = Newtonsoft.Json.JsonConvert.SerializeObject(document);
document.Dispose();
stream.Close();
return json;
}- Open the
appsettings.jsonfile in your web service project, Add the following lines below the existing"AllowedHosts"configuration
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"connectionString": "*Your Connection string from Azure*",
"containerName": "*Your container name in Azure*"
}NOTE
Replace Your Connection string from Azure with the actual connection string for your Azure Blob Storage account and Your container name in Azure with the actual container name
Step 3: 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 * as ReactDOM from 'react-dom';
import * as React from 'react';
import {
DocumentEditorContainerComponent, Toolbar
} from '@syncfusion/ej2-react-documenteditor';
DocumentEditorContainerComponent.Inject(Toolbar);
function App() {
let container: DocumentEditorContainerComponent;
function load(): void {
fetch(
'http://localhost:62870/api/documenteditor/LoadFromAzure',
{
method: 'Post',
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
body: JSON.stringify({ documentName: 'Getting Started.docx' })
}
)
.then(response => {
if (response.status === 200 || response.status === 304) {
return response.json(); // Return the Promise
} else {
throw new Error('Error loading data');
}
})
.then(json => {
container.documentEditor.open(JSON.stringify(json));
})
.catch(error => {
console.error(error);
});
}
return (
<div>
<button onClick={load}>Open Document From Azure Blob Storage</button>
<DocumentEditorContainerComponent id="container" ref={(scope) => { container = scope; }}
height={'590px'}
serviceUrl="http://localhost:62870/api/documenteditor/"
enableToolbar={true}
/>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sample'));NOTE
The Azure.Storage.Blobs NuGet package must be installed in your application to use the previous code example.