Thanks for Downloading Dynamic Web TWAIN 30-Day Trial!
Your download will start shortly. If your download does not begin, click here to retry.
Uploading Images to the Web Server
Prerequisite: DWT Initialization
Prerequisite: Managing the Image Buffer
DWT contains data upload APIs that allow uploading to web servers with just a few lines of code. DWT supports uploading via both HTTP and FTP.
Uploading over HTTP
DWT provides a variety of built-in HTTP upload APIs. Here, we demonstrate using HTTPUpload()to upload all
Sample Code
<html>
<head>
<script src="Resources/dynamsoft.webtwain.initiate.js"></script>
<script src="Resources/dynamsoft.webtwain.config.js"></script>
</head>
<body>
<input type="button" value="Scan" onclick="AcquireImage();" /><br/>
<!-- Upload all images in the buffer as a single PDF-->
<input type="button" value="Upload all images" onclick="upload();" /><br/>
<div id="dwtcontrolContainer"></div>
<script type="text/javascript">
var DWTObject;
Dynamsoft.DWT.RegisterEvent("OnWebTwainReady", function () {
DWTObject = Dynamsoft.DWT.GetWebTwain("dwtcontrolContainer");
});
function AcquireImage() {
if (DWTObject) {
DWTObject.SelectSourceAsync()
.then(function () {
return DWTObject.AcquireImageAsync({
IfCloseSourceAfterAcquire: true,
});
})
.catch(function (exp) {
alert(exp.message);
});
}
}
/**
* Upload the images specified by their indices in the specified file type.
* @param indices Specify the images
* @param type Specify the file type
*/
function upload() {
// Create path to server-side script
var url = "https://demo.dynamsoft.com/sample-uploads/"; // Path to demo script which has SSL certificate
DWTObject.HTTPPort = 433; // Using default HTTPS port, can be modified as needed
DWTObject.IfSSL = true; // Enable HTTPS
var fileName = "SampleFile.pdf";
if (DWTObject) {
DWTObject.SelectAllImages();
DWTObject.HTTPUpload(
url,
DWTObject.SelectedImagesIndices,
Dynamsoft.DWT.EnumDWT_ImageType.IT_PDF,
Dynamsoft.DWT.EnumDWT_UploadDataFormat.Binary,
fileName,
function() {
console.log('Successfully uploaded the file');
},
function(errCode, errString, responseStr) {
console.log(errString);
}
);
}
}
</script>
</body>
</html>
APIs used:
RegisterEvent()OnWebTwainReadySelectSourceAsync()AcquireImageAsync()IfCloseSourceAfterAcquireSelectAllImages()SelectedImagesIndicesHTTPUpload()HTTPPortIfSSLDynamsoft.DWT.EnumDWT_UploadDataFormatDynamsoft.DWT.EnumDWT_ImageType
Explanation
This sample uploads the scanned images to the server as a PDF in binary form, and hands the data off to the server for further processing. Note that the upload handler script (here https://demo.dynamsoft.com/sample-uploads/) must be defined in order to receive the data accordingly, but is otherwise language- and logic-agnostic. Read our server-side scripting guide for more information.
We use HTTPUpload() to perform the following tasks:
Note: Only
TIFsupport multi-page documents. When using other image formats,HTTPUpload()can only upload one image per API call - it will fail when selecting more than one image.
- Target images in the buffer specified by the
indicesarray for uploading.- We can only use more than one index when the target image format is
PDForTIF.
- We can only use more than one index when the target image format is
- Encode the images in the image format specified by
type. In this case, we call it with theDynamsoft.DWT.EnumDWT_ImageType.IT_PDFenum to encode to PDF.- This API supports
BMP,JPG,TIF,PNGandPDFformats. Learn more about supported file formats here. - Only
TIFs andPDFs support multi-page files, and they use theDynamsoft.DWT.EnumDWT_ImageType.IT_TIFandDynamsoft.DWT.EnumDWT_ImageType.IT_PDFvalues, respectively.
- This API supports
- Convert the encoded images into a type specified by the
Dynamsoft.DWT.EnumDWT_UploadDataFormat.Binary(either binary or Base64 strings). In this case we convert to binary. - Create an HTTP Form and perform an asynchronous HTTP (Ajax) request to send the form to the server-side script at the location specified by
url. - Wait for the confirmation from the server, then execute the callback.
- Note that
HTTPUpload()appends the correct file extension to the file name if it does not detect the correct ending in thefileNameargument. For example, passingexample.jpgfor aPDFresults in the fileexample.jpg.pdf, whereas passing the correctexample.pdfin the first place will not result in changes to the file name.
Before calling HTTPUpload(), we first select all images in the buffer using SelectAllImages(). HTTPUpload() receives the full list of image indices from SelectedImagesIndices.
Also, note that HTTPUpload() supports HTTPS when there is an SSL certificate. In this case, the sample upload site supplies an SSL certificate, so we enable HTTPS with Dynamsoft.DWT.IfSSL = true. (the default value is false)
DWT provides other HTTP uploading APIs as well, such as for specifically uploading multi-page PDFs, or for uploading via HTTP post requests, among others. Read more about them in detail in our API reference.
Using Existing Upload Logic with DWT
We can also continue to use existing AJAX-style upload logic to upload images from DWT. The following example block assumes the existing logic is AJAX and uses FormData:
function uploadThroughAJAX(imageBufferIndices, fileFormat) {
DWTObject.ConvertToBlob(
imageBufferIndices,
fileFormat,
function(result, _indices, fileFormat) {
var url = "https://YOUR-SITE:PORT/PATH/TO/SCRIPT.aspx";
var fileName = "SampleFile" + getExtension(fileFormat);
var formData = new FormData();
formData.append('RemoteFile', result, fileName);
var response = await fetch(url, {method: "POST", body: formData});
// Check response
},
function(errorCode, errorString) {
console.log(errorString);
}
);
}
function getExtension(fileFormat) {
switch (fileFormat) {
case Dynamsoft.DWT.EnumDWT_ImageType.IT_BMP:
return ".bmp";
case Dynamsoft.DWT.EnumDWT_ImageType.IT_JPG:
return ".jpg";
case Dynamsoft.DWT.EnumDWT_ImageType.IT_TIF:
return ".tif";
case Dynamsoft.DWT.EnumDWT_ImageType.IT_PNG:
return ".png";
case Dynamsoft.DWT.EnumDWT_ImageType.IT_PDF:
return ".pdf";
default:
return ".unknown";
}
}
APIs used:
Explanation
The only DWT API used in this example is ConvertToBlob(), which takes care of file format encoding and binary conversion of the images, with a given array of image buffer indices and a file format enum.
Uploading over FTP
Aside from HTTP, DWT also supports FTP, which is much simpler to use. The FTPUpload() is used to upload a single image like so:
DWTObject.FTPUserName = 'username';
DWTObject.FTPPort = 21;
DWTObject.FTPPassword = 'password';
DWTObject.FTPUpload(
'192.168.8.222', //The FTP Host
imageIndex,
'test.pdf', // The path & name of the file
function () { console.log('Successful FTP upload'); },
function (errorCode, errorString) { console.log('Failed FTP upload'); }
);
APIs used:
Note that the FTP port (and credentials) are set using WebTwain instance properties, unlike the host address which is passed as an argument.
DWT provides other HTTP upload APIs, for example, to better handle multi-page files (in the case of TIF and PDF formats). Please read more in our API reference.
FileUploader
The FileUploader is a special feature that uploads files using the Dynamic Web TWAIN Service, rather than directly from the web application. This is useful for uploading large amounts of data which may otherwise degrade browser performance. Here is a quick run-down of its operation:
Dynamic Web TWAINwill prepare the file to upload with the methodGenerateURLForUploadData()- Create a File Uploader instance with the method
Init() - Create an upload job with
CreateJob()- Define the target URL
ServerUrl - Define the upload content
SourceValue - (Optional) Define callback functions
OnUploadTransferPercentage,OnRunSuccess,OnRunFailure
- Define the target URL
- Run the job
- Wait for the confirmation from the server
Check out how to use the Uploader in the following code snippets
<html>
<head>
<script src="Resources/dynamsoft.webtwain.initiate.js"></script>
<script src="Resources/dynamsoft.webtwain.config.js"></script>
<script type="text/javascript" src="Resources/addon/dynamsoft.upload.js"></script>
</head>
<body>
<div id="processbar" style="width:0%;height: 10px;background-color: blue;"></div>
<button onclick="useUploader(DWTObject.SelectedImagesIndices, Dynamsoft.DWT.EnumDWT_ImageType.IT_PDF);">UseUploader</button>
<script type="text/javascript">
var dsUploadManager;
Dynamsoft.DWT.RegisterEvent("OnWebTwainReady", function () {
DWTObject = Dynamsoft.DWT.GetWebTwain('dwtcontrolContainer');
Dynamsoft.FileUploader.Init('', function (obj) {
dsUploadManager = obj;
},
function (errCode, errStr) {
console.log(errStr);
}
);
});
function useUploader(indices, type) {
if (DWTObject) {
DWTObject.GenerateURLForUploadData(indices, type, function (url, indices, iImageType) {
// Create a Job
var job = dsUploadManager.CreateJob();
// Configure the Job
job.ServerUrl = "....";
var fileName = "SampleFile" + getExtension(type);
job.SourceValue.Add(url, fileName);
job.OnUploadTransferPercentage = function (obj, percentage) {
console.log(percentage)
var processbar = document.getElementById("processbar");
processbar.style.width = percentage + "%";
};
job.OnRunSuccess = function () {
console.log("upload success");
};
job.OnRunFailure = function (e) {
console.error(e)
};
// Run the Job
dsUploadManager.Run(job);
}, function () { });
}
}
</script>
</body>
</html>
Check out Server-side Scripting for more information on the target URL.