在开发Web应用时,图像扫描与上传是一个常见需求。本文将指导如何在Web应用中实现这一功能,并解决一些常见问题。
在图像上传过程中,可能需要解决以下问题:
为了帮助更好地理解,提供了一个简单的示例,可以在部署应用到Web服务器后,亲自尝试图像扫描和上传的功能。该示例是基于Dynamsoft提供的第三方组件——Dynamic Web TWAIN开发的。
Dynamsoft的Dynamic Web TWAIN是一个浏览器插件,允许从扫描仪和其他TWAIN兼容设备扫描图像。扫描后,可以在不离开浏览器的情况下,将图像编辑并上传到本地文件夹、Web服务器、FTP站点、SharePoint和数据库。
可以通过在线演示来了解图像采集SDK的一般概念。
能够与主流浏览器一起工作,并能够以整洁的方式从扫描仪扫描图像,是Dynamsoft提供的优秀特性。由于本文重点介绍图像上传,提供了一个简单的示例,允许一次扫描多个图像。
function DWT_AcquireImage() {
if (DWT_DWTSourceContainerID == "") {
WebTWAIN.SelectSource();
} else {
WebTWAIN.SelectSourceByIndex(document.getElementById(DWT_DWTSourceContainerID).selectedIndex);
}
WebTWAIN.CloseSource();
WebTWAIN.OpenSource();
WebTWAIN.IfFeederEnabled = true;
WebTWAIN.IfShowUI = false;
WebTWAIN.PixelType = 2;
WebTWAIN.Resolution = 200;
WebTWAIN.AcquireImage();
}
通过将IfFeederEnabled设置为true,文档将从自动文档送纸器(ADF)扫描。除了示例中硬编码的像素类型和分辨率之外,还有更多属性,如页面大小和亮度,可以帮助标准化(或定制)图像特性。
以下示例展示了如何将扫描的图像上传到Web服务器。根据要求,也可以将图像上传到数据库、本地文件夹,甚至通过电子邮件发送给某人。
是否通过SSL上传图像
var strHTTPServer = location.hostname;
if (window.location.protocol != "https:") {
WebTWAIN.HTTPPort = location.port == "" ? 80 : location.port;
WebTWAIN.IfSSL = false;
} else {
WebTWAIN.HTTPPort = 443;
WebTWAIN.IfSSL = true;
}
创建一个文本框"txt_Directory"。使用以下代码行将额外的信息与图像一起上传。
WebTWAIN.ClearAllHTTPFormField();
WebTWAIN.SetHTTPFormField("Directory", document.getElementById("txt_Directory").value);
将扫描的图像上传到Web服务器,并以多页PDF格式保存。
if (!DWT_CheckIfImagesInBuffer()) {
return;
}
var i, strHTTPServer, strActionPage, strImageType;
var ID_txt_fileName = document.getElementById("txt_fileName");
ID_txt_fileName.value = ID_txt_fileName.value.trim();
ID_txt_fileName.className = "";
if (!strre.test(ID_txt_fileName.value)) {
ID_txt_fileName.className += "invalid";
ID_txt_fileName.focus();
AppendMessage("Please input file name. Currently only English names are allowed.");
return;
}
var CurrentPathName = unescape(location.pathname);
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);
strActionPage = CurrentPath + "SaveToFile.aspx";
var uploadfilename = ID_txt_fileName.value + ".pdf";
if ((WebTWAIN.SelectedImagesCount == 1) || (WebTWAIN.SelectedImagesCount == WebTWAIN.HowManyImagesInBuffer)) {
WebTWAIN.HTTPUploadAllThroughPostAsPDF(strHTTPServer, strActionPage, uploadfilename);
} else {
WebTWAIN.HTTPUploadThroughPostAsMultiPagePDF(strHTTPServer, strActionPage, uploadfilename);
}
DWT_CheckErrorString();
SaveToFile.aspx.cs
using System;
using System.IO;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class SaveToFile : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
String strExc = "";
try
{
HttpFileCollection files = HttpContext.Current.Request.Files;
HttpPostedFile uploadfile = files["RemoteFile"];
string directoryPath = System.Web.HttpContext.Current.Request.MapPath(".") + "/ImageScanned/" + HttpContext.Current.Request.Form["Directory"] + "/";
if (!System.IO.Directory.Exists(directoryPath)) System.IO.Directory.CreateDirectory(directoryPath);
string filePath = directoryPath + uploadfile.FileName;
uploadfile.SaveAs(filePath);
}
catch (Exception exc)
{
strExc = exc.ToString();
String strField1Path = HttpContext.Current.Request.MapPath(".") + "/" + "log.txt";
if (strField1Path != null)
{
StreamWriter sw1 = File.CreateText(strField1Path);
sw1.Write(strExc);
sw1.Close();
}
Response.Write(strExc);
}
}
}
支持的图像格式包括BMP、JPEG、PNG、(多页)TIFF和(多页)PDF。
可以在以下链接找到更多Dynamic Web TWAIN的示例: