Open document from AWS S3 in Angular Document editor
22 Jun 20265 minutes to read
To load a document from AWS S3 in a Angular DOCX Editor (Document Editor), you can follow the steps below
Step 1: 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 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 Amazon;
using Amazon.S3;
using Amazon.S3.Model;- 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 IConfiguration _configuration;
public readonly string _accessKey;
public readonly string _secretKey;
public readonly string _bucketName;
public DocumentEditorController(IWebHostEnvironment hostingEnvironment, IMemoryCache cache, IConfiguration configuration)
{
_hostingEnvironment = hostingEnvironment;
_cache = cache;
_configuration = configuration;
_accessKey = _configuration.GetValue<string>("AccessKey");
_secretKey = _configuration.GetValue<string>("SecretKey");
_bucketName = _configuration.GetValue<string>("BucketName");
}- Create the
LoadFromS3()method to load the document from AWS S3.
[AcceptVerbs("Post")]
[HttpPost]
[EnableCors("AllowAllOrigins")]
[Route("LoadFromS3")]
//Post action for Loading the documents
public async Task<string> LoadFromS3([FromBody] Dictionary<string, string> jsonObject)
{
MemoryStream stream = new MemoryStream();
if (jsonObject == null && !jsonObject.ContainsKey("documentName"))
{
return null;
}
RegionEndpoint bucketRegion = RegionEndpoint.USEast1;
// Configure the AWS SDK with your access credentials and other settings
var s3Client = new AmazonS3Client(_accessKey, _secretKey, bucketRegion);
string documentName = jsonObject["documentName"];
// Specify the document name or retrieve it from a different source
var response = await s3Client.GetObjectAsync(_bucketName, documentName);
Stream responseStream = response.ResponseStream;
responseStream.CopyTo(stream);
stream.Seek(0, SeekOrigin.Begin);
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": "*",
"AccessKey": "Your Access Key from AWS S3",
"SecretKey": "Your Secret Key from AWS S3",
"BucketName": "Your Bucket name from AWS S3"
}Replace Your Access Key from AWS S3, Your Secret Key from AWS S3, and Your Bucket name from AWS S3 with your actual AWS access key, secret key and bucket 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 { 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 AWS S3 Bucket</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/LoadFromS3';
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 AWSSDK.S3 NuGet package must be installed in your application to use the previous code example.