Save Documents to AWS S3 in ASP.NET Core DOCX Editor
27 Aug 20268 minutes to read
To save a document to AWS S3, follow these steps:
Step 1: Create a Simple ASP.NET Core DOCX Editor (Document Editor) Sample in ASP.NET Core
Follow the steps in this link to create a simple DOCX Editor sample in ASP.NET Core. This will give you a basic setup of the DOCX Editor component.
Step 2: Modify the DocumentEditorController.cs File in the 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 a constructor to the
DocumentEditorControllerclass. In the constructor, assign the configuration values to the corresponding fields.
private IWebHostEnvironment _hostingEnvironment;
private IMemoryCache _cache;
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
SaveToS3()method to save the document to the AWS S3 bucket
[AcceptVerbs("Post")]
[HttpPost]
[EnableCors("AllowAllOrigins")]
[Route("SaveToS3")]
//Post action for saving the document to AWS S3
public void SaveToS3(IFormCollection data)
{
if (data.Files.Count == 0)
return;
RegionEndpoint bucketRegion = RegionEndpoint.USEast1;
// Configure the AWS SDK with your access credentials and other settings
var s3Client = new AmazonS3Client(_accessKey, _secretKey, bucketRegion);
string bucketName = _bucketName;
IFormFile file = data.Files[0];
string documentName = this.GetValue(data, "documentName");
string result = Path.GetFileNameWithoutExtension(documentName);
Stream stream = new MemoryStream();
file.CopyTo(stream);
var request = new PutObjectRequest
{
BucketName = bucketName,
Key = result + "_downloaded.docx",
InputStream = stream,
};
// Upload the document to AWS S3
var response = s3Client.PutObjectAsync(request).Result;
}
private string GetValue(IFormCollection data, string key)
{
if (data.ContainsKey(key))
{
string[] values = data[key];
if (values.Length > 0)
{
return values[0];
}
}
return "";
}- 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"
}NOTE
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.cshtml File in the DOCX Editor sample
On the client side, export the document to a blob using saveAsBlob and send it to the server for saving in the AWS S3 bucket.
<ejs-button id="export">Save to AWS S3 Bucket</ejs-button>
<ejs-documenteditorcontainer id="container"></ejs-documenteditorcontainer>
<script>
var documenteditor;
document.addEventListener('DOMContentLoaded', function () {
var documenteditorElement = document.getElementById("container");
container = documenteditorElement.ej2_instances[0];
document.getElementById('export').addEventListener('click', function () {
container.documentEditor.saveAsBlob('Docx').then((blob) => {
var exportedDocument = blob;
//Now, save the document where ever you want.
var formData = new FormData();
formData.append('documentName', container.documentEditor.documentName);
formData.append('data', exportedDocument);
/* tslint:disable */
var req = new XMLHttpRequest();
// Replace your running Url here
req.open(
'POST',
window.baseurl + 'api/documenteditor/SaveToS3',
true
);
req.onreadystatechange = () => {
if (req.readyState === 4) {
if (req.status === 200 || req.status === 304) {
console.log('Saved sucessfully');
}
}
};
req.send(formData);
});
});
});
</script>public ActionResult Default()
{
return View();
}NOTE
The AWSSDK.S3 NuGet package must be installed in your application to use the code above.