掃描識(shí)別工具Dynamic Web TWAIN使用教程:將圖像上傳到Web服務(wù)器(下)
上一篇文章教大家如何將圖片上傳到服務(wù)器,本篇文章將繼續(xù)與大家分享如何將圖像上傳到FTP和數(shù)據(jù)庫(kù)。
【Dynamic Web TWAIN最新版免費(fèi)下載>>>】
操作頁(yè)面
HTTP上傳方法向服務(wù)器上的操作頁(yè)面發(fā)出標(biāo)準(zhǔn)HTTP發(fā)布請(qǐng)求。請(qǐng)求包含圖像數(shù)據(jù),圖像名稱等。在操作頁(yè)面中,你可以根據(jù)需要處理圖像數(shù)據(jù)。從技術(shù)上講,你可以使用任何服務(wù)器端語(yǔ)言(例如C#,VB,PHP,Java)編寫操作頁(yè)面。
這是C#中的一個(gè)例子:
此操作頁(yè)面從當(dāng)前HTTP請(qǐng)求對(duì)象中檢索圖像數(shù)據(jù),并將其作為本地文件保存在服務(wù)器上。
HttpFileCollection files = HttpContext.Current.Request.Files; HttpPostedFile uploadfile = files["RemoteFile"]; uploadfile.SaveAs(System.Web.HttpContext.Current.Request.MapPath(".") + "/" + uploadfile.FileName);
請(qǐng)注意,RemoteFile是上傳圖像數(shù)據(jù)的默認(rèn)名稱/密鑰。如有必要,可以使用屬性HttpFieldNameOfUploadedImage更改它。
在PHP中:
$fileTempName = $_FILES['RemoteFile']['tmp_name']; $fileSize = $_FILES['RemoteFile']['size']; $fileName = $_FILES['RemoteFile']['name']; move_uploaded_file($fileTempName, $fileName) ;
上傳到FTP
除了HTTP上傳方法,你還可以使用FTP上傳方法將圖像更新到FTP Web服務(wù)器。可用的API是:
格式 | 方法 |
任何類型 | FTPUploadDirectly( ) |
支持的圖像 | FTPUpload( ) FTPUploadEx( ) |
多頁(yè)P(yáng)DF | FTPUploadAllAsPDF( ) FTPUploadAsMultiPagePDF( ) |
多頁(yè)TIFF | FTPUploadAllAsMultiPageTIFF( ) FTPUploadAsMultiPageTIFF( ) |
代碼片段
DWObject.FTPUserName = 'test'; DWObject.FTPPort = 21; DWObject.FTPPassword = 'test'; DWObject.FTPUploadAllAsPDF( '192.168.8.222', 'test.pdf', OnFtpUploadSuccess, OnFtpUploadFailure );
將圖像上傳到數(shù)據(jù)庫(kù)
Dynamic Web TWAIN不會(huì)直接將圖像保存/上傳到數(shù)據(jù)庫(kù)。相反,圖像數(shù)據(jù)首先保存在操作頁(yè)面,然后操作頁(yè)面中的代碼決定存儲(chǔ)它的位置。
如果你不確定如何將圖像數(shù)據(jù)上傳到服務(wù)器,請(qǐng)參閱上一篇文章“服務(wù)器磁盤上的上傳和保存”。
不同的數(shù)據(jù)庫(kù)系統(tǒng)可能具有不同的圖像數(shù)據(jù)數(shù)據(jù)類型。我們一般在MSSQL Server中使用BLOB或varbinary,在Oracle中使用Long raw或BLOB,在MySQL中使用BLOB。
以下是在MSSQL Server中使用C+的示例:
int iFileLength; HttpFileCollection files = HttpContext.Current.Request.Files; HttpPostedFile uploadfile = files["RemoteFile"]; String strImageName = uploadfile.FileName; iFileLength = uploadfile.ContentLength; Byte[] inputBuffer = new Byte[iFileLength]; System.IO.Stream inputStream; inputStream = uploadfile.InputStream; inputStream.Read(inputBuffer,0,iFileLength); // add code to connect to database String SqlCmdText = "INSERT INTO tblImage (strImageName,imgImageData) VALUES (@ImageName,@Image)"; System.Data.SqlClient.SqlCommand sqlCmdObj = new System.Data.SqlClient.SqlCommand(SqlCmdText, sqlConnection); sqlCmdObj.Parameters.Add("@Image",System.Data.SqlDbType.Binary,iFileLength).Value = inputBuffer; sqlCmdObj.Parameters.Add("@ImageName",System.Data.SqlDbType.VarChar,255).Value = strImageName; sqlConnection.Open(); sqlCmdObj.ExecuteNonQuery(); sqlConnection.Close();
在此代碼片段中,我們從當(dāng)前HTTP請(qǐng)求獲取文件對(duì)象,并將圖像數(shù)據(jù)寫入字節(jié)數(shù)組。在SQL語(yǔ)句中,我們將字節(jié)數(shù)組作為System.Data.SqlDbType.Binary傳遞給數(shù)據(jù)庫(kù),并將數(shù)據(jù)存儲(chǔ)在imgImageData的BL字段中。
上傳帶有附加數(shù)據(jù)的圖像
有時(shí)我們需要將更多信息傳遞給服務(wù)器。例如,文檔類型,員工ID,文檔描述等。由于在HTTP上傳方法中沒(méi)有傳遞附件數(shù)據(jù)的方法,因此我們需要使用名為SetHTTPFormField的方法。
SetHTTPFormField(String sFieldName, String sFieldValue)
- String sFieldName:指定Web表單中文本字段的名稱
- String sFieldValue:指定Web表單中文本字段的值
我們需要在上傳之前就使用此方法。例如:
DWObject.ClearAllHTTPFormField(); // Clear all fields first DWObject.SetHTTPFormField("EmployeeID", "2012000054"); DWObject.SetHTTPFormField("DocumentType", "Invoice"); DWObject.SetHTTPFormField("DocumentDesc", "This is an invoice from ...");
在操作頁(yè)面中,你可以通過(guò)字段名稱從請(qǐng)求對(duì)象中檢索數(shù)據(jù)。例如:
String EmployeeID = HttpContext.Current.Request.Form["EmployeeID"];
關(guān)于如何使用Dynamic Web TWAIN將圖像上傳到Web服務(wù)器的教程到此結(jié)束,下一篇將與大家分享如何從網(wǎng)上下載圖片,敬請(qǐng)期待~