Obatain images
public class Program
{
public static void Main(string[] args)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(@"E:\Project\ObtainImages\ObtainImages\ImageCategloryId.xml");
//获取节点列表
//XmlNodeList topM = xmldoc.SelectNodes("//first");
XmlNodeList root = xmldoc.SelectNodes("/root");
XmlNodeList firstNodeList = root[0].ChildNodes;
//int num = root.Count;
foreach (XmlNode firNode in firstNodeList)
{
//string address = "D:/data";
ReadNode(firNode);
}
}
private static void ReadNode(XmlNode node, string saveAddress="D:/data")
{
string currentId = node.Attributes["id"].Value;
string currentAddress = string.Format("{0}/{1}", saveAddress, currentId);
List<MatQueue> matQueues = GetImageDataList(currentId);
if (matQueues.Count() != 0)
{
DownloadImageByAddress(currentAddress, matQueues);
}
if (node.HasChildNodes)
{
XmlNodeList nextNodeList = node.ChildNodes;
foreach (XmlNode nextNode in nextNodeList)
{
ReadNode(nextNode,currentAddress);
}
}
}
private static void DownloadImageByAddress(string saveAddress, List<MatQueue> matQueues)
{
// 下载图片
string root = "//172.18.4.2/assets2/";
string uri_root = "http://local.image.test/imagedir";
foreach (MatQueue item in matQueues)
{
string dataPath = item.imagepath;
string address = root + item.imagepath;
string dir = Path.GetDirectoryName(address);
if (dataPath.Count()<20)
{
return;
}
string end_uri = dataPath.Remove(0, 7);
string uri = uri_root + end_uri;
try
{
if (Directory.Exists(dir))
{
System.Net.WebClient webClient = new System.Net.WebClient();
if (!Directory.Exists(saveAddress))
{
Directory.CreateDirectory(saveAddress);
}
webClient.DownloadFile(uri, saveAddress +"/"+ item.materialid + ".jpg");
Console.WriteLine(uri);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
private static List<MatQueue> GetImageDataList(string categoryId)
{
string address = null;
List<MatQueue> matQueue = new List<MatQueue>();
using (OracleConnection cn = GetOraConnection())
{
//string sqlGetAddress = "Select caddataaddress From Cadqueue Where extdata = :MaterialId";
string sqlGetAddress = "select materialid, imagepath from pmc.designmaterial q where q.CATEGORYID = :CategoryId AND q.imagepath is not null";
OracleCommand cmd = new OracleCommand(sqlGetAddress, cn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new OracleParameter("CategoryId", categoryId));
cn.Open();
OracleDataReader dtr = cmd.ExecuteReader();
while (dtr.Read())
{
matQueue.Add(PopulateQueuesFromIDataReader(dtr));
}
dtr.Close();
cn.Close();
}
return matQueue;
}
public static OracleConnection GetOraConnection()
{
string constr = ConfigurationManager.AppSettings["DataBaseString"];
return new OracleConnection(constr);
}
public static MatQueue PopulateQueuesFromIDataReader(System.Data.IDataReader dr)
{
MatQueue queues = new MatQueue();
//循环读取各字段
for (int i = 0; i < dr.FieldCount; i++)
{
if (dr[i] != System.DBNull.Value) // 利用属性索引
{
queues[dr.GetName(i)] = dr[i];
}
}
return queues;
}
}
属性索引代码
public class MatQueue
{
public string materialid;
public string imagepath;
//属性索引
public object this[string propertyName]
{
get
{
#region get
switch (propertyName.ToLower())
{
case "materialid":
return this.materialid;
case "imagepath":
return this.imagepath;
default:
return null;
}
#endregion
}
set
{
#region set
switch (propertyName.ToLower())
{
case "materialid":
materialid = Convert.ToString(value);
break;
case "imagepath":
this.imagepath = Convert.ToString(value);
break;
}
#endregion
}
}
}
Xml 结构
<root>
<first id="erwqr">
<second id="fsad">
<third id="1"></third>
<third id="2"></third>
<third id="3"></third>
<third id="4"></third>
</second>
</first>
</root>