本文件参考了网上一些文章后,改写而成。但还有一些地方有待改进。如有更好的方式,请联系我。
需求描述:为实现客户端采集图像,然后把图像发送到服务端进行处理(图像一般很小)。
实现方式:由于由系统决定传递什么文件,所以这样就不能够采用传统的方式(让用户来选择一个文件上传)。
我暂时采用XML来传递数据,把图片信息以流的方式存储在一个节点中,然后把该XML文件上传到服务端,在服务端取得该XML信息,最后转换出我们需要的图片信息,这时我们就可以想怎么对图片进行处理就怎么处理了。
代码如下:
客户端我用了AxtiveX控件,用VB6.0编写。也可以把他放在脚本中。本人的对JavaScript不甚熟悉,加上ActivX控件还能为我处理一些采集图像的工作。所以,……
'功 能:把本地文件以XML文件形式上传到服务器端,图片节点的数据类型为"bin.base64"
'参数说明:FileName,本地全文件名
'代码参考:http://www.15seconds.com/issue/010522.htm
'
Private Function getValue(FileName As String)
Dim oStream As Stream
Dim xml_dom As DOMDocument
Set oStream = New Stream
Set xml_dom = New DOMDocument
xml_dom.loadXML ("<?xml version=" + "" + """1.0""" + "" + " ?> <root/>")
xml_dom.documentElement.setAttribute "xmlns:dt", "urn:schemas-microsoft-com:datatypes"
Dim l_node1 As IXMLDOMElement
Set l_node1 = xml_dom.createElement("StreamDataNode")
l_node1.dataType = "bin.base64"
oStream.Type = adTypeBinary
oStream.Open
oStream.LoadFromFile FileName '读入所有数据
oStream.Position = 0 '从起始位置开始
l_node1.nodeTypedValue = oStream.Read '把数据流给节点赋值
oStream.Close '关闭对象
xml_dom.documentElement.appendChild l_node1
Dim oxmlHttp As New XMLHTTP
oxmlHttp.Open "POST", RequestUrl, False
'发送数据到服务端
oxmlHttp.send xml_dom
Set oStream = Nothing
Set xml_dom = Nothing
End Function
服务端用C#做编程语言
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
//读取流,有待改进,未对文件大小等信息做限制,也没有处理异常。
if (Request.InputStream.Length>0)
{
System.IO.StreamReader stm = new System.IO.StreamReader(Request.InputStream);
XmlTextReader xmlRd = new XmlTextReader(stm);
xmlRd.WhitespaceHandling = WhitespaceHandling.None;