Save Documents to Dropbox Cloud Storage in Vue DOCX Editor
28 Aug 20268 minutes to read
To save a document to Dropbox cloud file storage, you can follow the steps below.
Step 1: Create a Dropbox API app
To create a Dropbox API App, you should follow the official Dropbox .NET tutorial provided by Dropbox. The process involves visiting the Dropbox Developer website and using their App Console to set up your API app. This app will allow you to interact with Dropbox programmatically, enabling secure access to files and data.
Step 2: Create a Simple DOCX Editor sample in Vue
Follow the instructions provided in this link to create a simple DOCX Editor sample in Vue. This will give you a basic setup of the DOCX 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 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 Dropbox.Api;
using Dropbox.Api.Files;- 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 _accessToken;
public readonly string _folderName;
public DocumentEditorController(IWebHostEnvironment hostingEnvironment, IMemoryCache cache, IConfiguration configuration)
{
_hostingEnvironment = hostingEnvironment;
_cache = cache;
_configuration = configuration;
_accessToken = _configuration.GetValue<string>("AccessToken");
_folderName = _configuration.GetValue<string>("FolderName");
}- Create the
SaveToDropBox()method to save the downloaded document to Dropbox cloud file storage bucket
[AcceptVerbs("Post")]
[HttpPost]
[EnableCors("AllowAllOrigins")]
[Route("SaveToDropBox")]
//Post action for uploading the document to Dropbox
public async Task SaveToDropBox(IFormCollection data)
{
if (data.Files.Count == 0)
return;
IFormFile file = data.Files[0];
string documentName = this.GetValue(data, "documentName");
string result = Path.GetFileNameWithoutExtension(documentName);
string fileName = result + "_downloaded.docx";
using (var dropBox = new DropboxClient(_accessToken))
{
Stream stream = new MemoryStream();
try
{
file.CopyTo(stream);
// Upload the document to Dropbox
var uploadedFile = await dropBox.Files.UploadAsync(
_folderName + "/" + fileName,
WriteMode.Overwrite.Instance,
body: stream
);
}
catch (Exception ex)
{
// Log or handle the upload failure (e.g., invalid token, folder not found, permission denied)
throw;
}
finally
{
stream.Dispose();
}
}
}
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": "*",
"AccessToken": "Your_Dropbox_Access_Token",
"FolderName": "Your_Folder_Name"
}Replace Your_Dropbox_Access_Token with your actual Dropbox access token and Your_Folder_Name with your folder name. The Dropbox.Api NuGet package (version 7.x or later) must be installed in your application to use the previous code example.
Step 4: Modify the index file in the DOCX Editor sample
On the client side, export the document to a blob using saveAsBlob and send it to the server side for saving in Dropbox cloud file storage.
<template>
<button v-on:click='save' >Save to DropBox Cloud</button>
<ejs-documenteditorcontainer ref="container" :serviceUrl='serviceUrl' :height='height' :enableToolbar='true' :created= "onCreate()"> </ejs-documenteditorcontainer>
</template>
<script>
import Vue from 'vue';
import { DocumentEditorContainerPlugin, DocumentEditorContainerComponent,Toolbar } from '@syncfusion/ej2-vue-documenteditor';
Vue.use(DocumentEditorContainerPlugin);
export default {
data(){
return {
serviceUrl:'http://localhost:62870/api/documenteditor/',
height: '590px'
}
},
provide: {
DocumentEditorContainer: [Toolbar]
},
methods: {
save: function() {
this.$refs.container.ej2Instances.documentEditor.saveAsBlob('Docx').then((blob: Blob) => {
let exportedDocument = blob;
//Now, save the document where ever you want.
let formData: FormData = new FormData();
formData.append('documentName', this.$refs.container.ej2Instances.documentEditor.documentName);
formData.append('data', exportedDocument);
/* tslint:disable */
let req = new XMLHttpRequest();
// Replace your running Url here
req.open(
'POST',
'http://localhost:62870/api/documenteditor/SaveToDropBox',
true
);
req.onreadystatechange = () => {
if (req.readyState === 4) {
if (req.status === 200 || req.status === 304) {
console.log('Saved sucessfully');
}
}
};
req.send(formData);
});
}
}
}
</script>The Dropbox.Api NuGet package must be installed in your application to use the previous code example.