上传图片到web服务器

在我们上传图片之前,我们需要设置服务器IP /名称,设置端口号,以及定义后台页面的路径。 后台页面指的是接收包含图像数据的HTTP Post请求的目标脚本。该脚本还负责处理所有服务器端操作,如将数据保存在硬盘或数据库上等。以下是一个示例:

var strHTTPServer = location.hostname;
DWObject.HTTPPort = location.port == "" ? 80 : location.port;
var CurrentPathName = unescape(location.pathname);
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);
var strActionPage = CurrentPath + "actionPage.aspx"; // actionPage.aspx即后台页面
var uploadfilename = "TestImage.pdf";

在以上代码段中

strHTTPServer用于存储服务器名称,指定将图像上传到哪个服务器中。 您也可以使用服务器的IP。 如果要将图像上传到与当前页面相同的服务器,我们建议您使用“location.hostname”获取主机名。

HTTPPort属性指定用于上传的HTTP端口。 通常,端口80用于HTTP,端口443用于HTTPS。如果您不确定端口号,建议您使“location.port == "" ? 80 : location.port”来获取当前端口号。

CurrentPathNameCurrentPath用于构建操作页面的相对路径。

strActionPage存储后台页面的相对路径。

uploadfilename存储上传图像的文件名。 您可以根据需要更改扩展名。

请注意:

在版本10及以上,我们使用浏览器作为上传代理。 由于浏览器安全限制,不允许客户端脚本(例如,JavaScript)向另一个域发出请求。 因此,当您试图将图片上传到具有不同域,子域名,端口或协议的服务器时,需要通过添加一个HTTP响应头来配置服务器以允许此类请求,如:

 Access-Control-Allow-Origin: *// 星号通配符允许任何站点上的脚本加载您的资源

以IIS 7为例。 您需要做的是将以下行合并到应用程序/站点根目录的web.config文件中:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Access-Control-Allow-Origin" value="*" />
                <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET,PUT"/>
                <add name="Access-Control-Allow-Headers" value="x-requested-with"/>
                <add name="Access-Control-Allow-Credentials" value="true" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

如果您还没有web.config文件,只需在应用程序/站点根目录创建一个名为web.config的新文件并添加上面的代码段。

调用方法

现在,我们可以调用其中一个HTTP上传方法来上传图像。 我们有以下8种方法:

格式 方法
所有文件 HTTPUploadThroughPostDirectly()
所有支持的图像格式 HTTPUpload()HTTPUploadThroughPost()HTTPUploadThroughPostEx()
多页PDF HTTPUploadAllThroughPostAsPDF()
HTTPUploadThroughPostAsMultiPagePDF()
多页TIFF HTTPUploadAllThroughPostAsMultiPageTIFF()
HTTPUploadThroughPostAsMultiPageTIFF()

我们以HTTPUploadAllThroughPostAsPDF()方法为例:

DWObject.HTTPUploadAllThroughPostAsPDF(
    strHTTPServer,
    strActionPage,
    uploadfilename,
    OnHttpUploadSuccess, OnHttpUploadFailure
);

使用此方法,Dynamic Web TWAIN控件中的所有图像将作为一个多页PDF文件发送到Web服务器。

在上面的代码中,参数OnHttpUploadSuccessOnHttpUploadFailure是可选的回调函数。 如果它们存在,则该方法是异步的,否则,该方法是同步的。 建议您异步使用这些方法以避免浏览器挂掉。以下是这两个函数的简单实现:

function OnHttpUploadSuccess() {
    console.log('successful');
}
function OnHttpUploadFailure(errorCode, errorString, sHttpResponse) {
    console.log(errorString)
}

如果要将一个图像上传为单页文件,可以使用HTTPUploadThroughPostHTTPUploadThroughPostEx

如果要将所选图像上传为多页文件,可以使用 HTTPUploadThroughPostAsMultiPagePDFHTTPUploadThroughPostAsMultiPageTIFF

后台页面

HTTP上传方法向服务器上的后台页面发出标准HTTP post请求。请求包含图像数据,图像名称等。在后台页面中,您可以根据需要处理图像数据。从技术上讲,您可以使用任何服务器端语言(C#,VB,PHP,Java等)编写后台页面。

下面是C#的示例代码

此后台页面从当前HTTP请求对象中检索图像数据,并作为本地文件保存在服务器上。

HttpFileCollection files = HttpContext.Current.Request.Files;
HttpPostedFile uploadfile = files["RemoteFile"];
uploadfile.SaveAs(System.Web.HttpContext.Current.Request.MapPath(".") + "/" +
uploadfile.FileName);

请注意:

RemoteFile是上传图像数据的默认名称。 如有必要,可以使用属性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服务器。 可用的API是:

格式 方法
所有文件 FTPUploadDirectly()
所有支持的图像格式 FTPUpload()FTPUploadEx()
多页PDF FTPUploadAllAsPDF()FTPUploadAsMultiPagePDF()
多页TIFF FTPUploadAllAsMultiPageTIFF()FTPUploadAsMultiPageTIFF()

代码片段:

DWObject.FTPUserName = 'test';
DWObject.FTPPort = 21;
DWObject.FTPPassword = 'test';
DWObject.FTPUploadAllAsPDF(
    '192.168.8.222',
    'test.pdf',
    OnFtpUploadSuccess,
    OnFtpUploadFailure
);

将图片上传到数据库

Dynamic Web TWAIN不会直接将图像保存/上传到您的数据库。 但是,我们可以先将图像数据上传到后台页面,然后使用后台页面将图像数据存储在数据库中。

如果您不确定如何将图像数据上传到服务器,请参阅上一节上传图片到Web服务器

不同的数据库系统有不同的图像数据类型。 我们通常在SQL Server中使用BLOBvarbinary,在Oracle中使用Long rawBLOB,在MySQL中使用BLOB等。

以下是C#在SQL Server中的示例:

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();

在代码片段中,我们从当前的HTTP请求中获取文件对象,并将图像数据写入字节数组。 在SQL语句中,我们将字节数组作为System.Data.SqlDbType.Binary传递给数据库,并将数据存储在名为“imgImageData”的BL字段中。

上传包含额外数据的图片

如果您不确定如何将图像数据上传到服务器,请参阅上一节上传图片到Web服务器

有时我们需要将更多的信息传递给服务器。 例如,文档类型,员工ID,文档描述等。可以使用SetHTTPFormField方法来实现。

我们需要在HTTPUpload()方法之前使用此方法。 例如:

DWObject.ClearAllHTTPFormField(); // Clear all fields first
DWObject.SetHTTPFormField("EmployeeID", "2012000054");
DWObject.SetHTTPFormField("DocumentType", "Invoice");
DWObject.SetHTTPFormField("DocumentDesc", "This is an invoice from ...");

在后台页面中,您可以通过字段名称从请求对象中检索数据。 例如:

String EmployeeID = HttpContext.Current.Request.Form["EmployeeID"];

results matching ""

    No results matching ""