fileservice 类代码放哪里_WebService传输文件的几个知识点

本文介绍了使用WebService进行XML数据传输时涉及的关键知识点,包括XML Schema的编写、用Xsd验证XML的代码实现、将文件编码放入XML及从XML中提取并保存文件的方法。同时,提供了C#代码示例来说明整个流程。
摘要由CSDN通过智能技术生成

前几天用WebService写了传数据的接口。

要求是 传XML数据 并用Schema(即xsd文件)验证 并且伴有图片传输。

做这个项目首先要理解

WebService 传数据本身是通过XML格式传的,所传的数据最后都被包装在一个XML里了

基于这点,需要准备以下几个知识点。

1. XML Schema 的编写 (命名空间 ,数据类型,定义属性类型,定义多个相同标签方法)

2.用Xsd验证XML的程序代码

3.将文件以什么形式放到xml里

4.如何从xml里取出文件并保存到本地

ps:我用正则声称XML的时候用\1做后向引用不成功,原因是。C#根js一样都用的是类似$1这样引用的,坑爹的教程啊。

好了。我们把几个知识点罗列一下就OK啦。

1.列出XML于XML Schema的样本

a.xml

01

a.xsd

targetNamespace="http://www.cnstroke.com"

elementFormDefault="qualified"

xmlns="http://www.cnstroke.com"

xmlns:mstns="http://www.cnstroke.com"

xmlns:xs="http://www.w3.org/2001/XMLSchema"

>

2..用Xsd验证XML的程序代码

private void ValidationEventCallBack(Object sender, ValidationEventArgs e)

{

if (e.Severity == XmlSeverityType.Warning)//区分是警告还是错误

{

xmlErr += "
验证成功!警告:" + e.Message;

}

else

{

xmlErr += "
Err:" + e.Message;

}

}

private void CheckXmlValidate(string strRequestXML)

{

string ErrString = string.Empty;

StringReader sRead = null;

XmlReader xmlRead = null;

XmlSchemaSet schemaSet;

try

{

schemaSet = new XmlSchemaSet();

sRead = new StringReader(strRequestXML);

schemaSet.Add(null, AppDomain.CurrentDomain.BaseDirectory + "/XML/" + xsdFile + ".xsd");

XmlReaderSettings settings = new XmlReaderSettings();

settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventCallBack);

settings.ValidationType = ValidationType.Schema;

settings.Schemas = schemaSet;

xmlRead = XmlReader.Create(sRead, settings);

// xmlRead = XmlReader.Create(xmlUrl, settings);//此处是通过传路径获取xml

while (xmlRead.Read())

{

}

if (ErrString.ToString() == String.Empty)

{

xmlErr += "验证成功!";

}

else

{

xmlErr += "验证失败!原因可能是:" + ErrString;

}

}

catch (XmlException exec)

{

xmlErr += exec.Message;

}

finally

{

if (xmlRead != null)

{

xmlRead.Close();

}

}

}

3.将文件以什么形式放到xml里

/// 相对路径

///

protected void setXmlNodeFile(XmlDocument xmldoc, XmlElement xmlelem, string filePath,string fileName)

{

XmlElement file = xmldoc.CreateElement("", "file", "");

file.SetAttribute("fileName",fileName);

string data = null;

int readByte = 0;        //

int bytesToRead = 900000;

FileStream fs = new FileStream(Server.MapPath(filePath), FileMode.Open);

bytesToRead = (int)fs.Length;

BinaryReader br = new BinaryReader(fs);

byte[] base64buffer = new byte[bytesToRead];

do

{

readByte = br.Read(base64buffer, 0, bytesToRead);      //将数据读入字节数组

// xmlTxtWt.WriteBase64(base64buffer, 0, readByte);       //将数组中二进制值编码为Base64并写出到XML文件

} while (bytesToRead <= readByte);

MemoryStream mem = new MemoryStream(base64buffer);

data = Convert.ToBase64String(mem.ToArray());

file.InnerText = data;

xmlelem.AppendChild(file);

}

4.如何从xml里取出文件并保存到本地

XmlDocument xmldoc = new XmlDocument();

xmldoc.Load(Server.MapPath("~/XML/ceshi1.xml"));

string PicByte = xmldoc.GetElementsByTagName("file")[0].InnerText;

byte[] b = Convert.FromBase64String(PicByte);

// System.IO.MemoryStream sm = new MemoryStream();

//  sm.Write(b, 0, b.Length);

using( FileStream fs = new FileStream(Server.MapPath("~/XML/yts.jpg"), FileMode.Create))

{

fs.Write(b,0,b.Length);

}

return Content("ok");

这样就好了其他细节 就不用说了

-----------------------------------------以下内容摘自网络

1.通过byte传输

把文件转换

public static byte[] ConvertToBinary(string Path)

{

FileStream stream = new FileInfo(Path).OpenRead();

byte[] buffer = new byte[stream.Length];

Console.WriteLine("The lenght of the file is

"+buffer.Length);

stream.Read(buffer, 0, Convert.ToInt32(stream.Length));

return buffer;

}

static byte[] buffer;

buffer = ConvertToBinary(path);

webService

FileStream fstream = new FileStream(filePath + fileName, FileMode.Append);

try

{

//MemoryStream m = new MemoryStream(fileBt);

//m.WriteTo(fstream);

fstream.Write(fileBt, 0,

fileBt.Length);

//二进制转换成文件

fstream.Close();

//rst += "\r\n";

rst += "File Name is:" + fstream.Name + "\r\n";

rst += "File Lenght is:" + fstream.Length + "\r\n";

rst += "File Position is:" + fstream.Position  +

"\r\n";

}

catch (Exception ex)

{

//抛出异常信息

rst = ex.ToString();

}

finally

{

fstream.Close();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值