<?xml version="1.0" encoding="UTF-8"?>
<!-- xml提示:禁止添加任何@或者#的字符 -->
<VR>
<UserId txt_s="用户的Id">01</UserId>
<ProjectId txt_s="工程项目的名称编号Id_需要具有唯一性">01</ProjectId>
<ProjectTitle txt_s="工程项目的名称_Title信息">01</ProjectTitle>
<!-- 企业类别名称(汉子),企业类别对应的文件夹名称(为拼音或数字) -->
<ProjectObject txt_s="企业类别对象" ProjectName="企业类别" ProjectPL="kuka">
</ProjectObject>
<SceneDB>
<!-- 全景图片名称(时间数字类型全景图名称例如:20180303132846)
当前全景图的场景名称
全景场景的展示排列顺序(从0 开始,包含0)
全景场景展示的第一个场景 -->
<Img ImgBitId="1.jpg" ImgSceneName="儿童房上下床" LookOrder="1" LookOrderOne="false">
</Img>
<Img ImgBitId="2.jpg" ImgSceneName="儿童房" LookOrder="2" LookOrderOne="true">
</Img>
<Img ImgBitId="3.jpg" ImgSceneName="衣柜间" LookOrder="3" LookOrderOne="false">
</Img>
<Img ImgBitId="4.jpg" ImgSceneName="客厅" LookOrder="4" LookOrderOne="false">
</Img>
<Img ImgBitId="5.jpg" ImgSceneName="书房" LookOrder="5" LookOrderOne="false">
</Img>
<Img ImgBitId="6.jpg" ImgSceneName="小客厅" LookOrder="6" LookOrderOne="false">
</Img>
</SceneDB>
<SandTableIndex SandTable="ditu.jpg" >
<!-- 沙盘坐标,1个场景对于1个点,可以没有不可以多于1个,距离左上角坐标,和属于那张图片的 -->
<Spot X="41" Y="63" LookOrderImg="1.jpg">
</Spot>
<Spot X="89" Y="163" LookOrderImg="2.jpg">
</Spot>
<Spot X="129" Y="253" LookOrderImg="3.jpg">
</Spot>
<Spot X="230" Y="250" LookOrderImg="4.jpg">
</Spot>
<Spot X="229" Y="227" LookOrderImg="5.jpg">
</Spot>
<Spot X="230" Y="143" LookOrderImg="6.jpg">
</Spot>
</SandTableIndex>
<SceneHotspot>
<!-- name 是热点的个数 title 是属于那个场景的 ath atv linkedscene 要跳转的地址 text 当前的跳转场景名称 -->
<Hotspot name="spot0" currentscene="1" ath="-79.05696003981" atv="4.66525107322491" linkedscene="0" text="儿童房上下床" />
<Hotspot name="spot1" currentscene="1" ath="-63.9108415937361" atv="0.241115507440341" linkedscene="1" text="儿童房" />
<Hotspot name="spot2" currentscene="1" ath="-58.8836107948887" atv="0.151810970747221" linkedscene="2" text="衣柜间" />
<Hotspot name="spot3" currentscene="2" ath="-143.145833010596" atv="3.50891279699468" linkedscene="3" text="客厅" />
</SceneHotspot>
<DesignerDB DesignerName="天海明王" DesignerNickName="迷离少卿将军" DesignerPhone="110" DesignerIntroduce="我是设计师" IntroduceTopImg="001.jpg" DesignerWCSingImg="WCSin_01.jpg" DesignerWCMoneyImg="money.jpg">
<!-- 1 设计师名称 2 设计师昵称 3 设计师电话 4设计师简介 5 设计师个人头像 6 设计师个人二维码 7设计师收钱二维码-->
</DesignerDB>
<HouseImgDrawing>
<!-- 1户型图名称(数字类型的图片名称)2户型图的宽和高的尺寸(例如300*200)3户型图的时间 标识可以进行更替更具时间 -->
<HouseImg HouseName="20180303132846.jpg" Width="200" Height="200" CreateTime="20180303132846">
</HouseImg>
</HouseImgDrawing>
</VR>
然后进行转换
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.IO.Compression;
using ICSharpCode.SharpZipLib;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using System.Drawing;
using System.Text.RegularExpressions;
namespace VR720_WinF_Duo_Service.Models
{
public class CheckComPres
{
/// <summary>
/// 任务核心 检查
/// </summary>
/// <param name="Id">任务号(例如:001 需要具有唯一性)</param>
/// <param name="Url">文件检查地址(例如:D:\ Wang\VR720_Pite)</param>
/// <param name="Name">压缩文件名称(例如:VR001.zip)</param>
/// <param name="Tooken">Tooken</param>
/// <returns></returns>
public static IEnumerable<Models.Prompt> GetDB(string Id, string Url, string Name, string Tooken)
{
Models.Journal.WiteJournal("开始文件资源检查:Id:" + Id + "Url:" + Url + "Name:" + Name + "Tooken:" + Tooken);
bool CheTookens = VR720Bll.TookenService.SelectTooken(Tooken);
if (CheTookens)
{
#region 检查数据
if (Directory.Exists(Url))
{
#region 检查压缩文件
if (File.Exists(Url + "\\" + Name))
{
//文件存在 ,开始解压
//首先获得地址解压文件地址原地址
string unZipDirectory = System.Configuration.ConfigurationManager.ConnectionStrings["FileZipUrl"].ToString();
string CreateZipUrl = unZipDirectory + "\\" + Id;//生成的指定位置为指定文件+任务号
string VRDBUrl = CreateZipUrl + "\\VRDB.txt";//检出数据
string VRDBLogoUrl = CreateZipUrl + "\\logo.png";// logo 地址
//文件解压
UnZipClass.UnZip(Url + "\\" + Name, CreateZipUrl);
//进行拆分数据 找出对应的文件 -- 进行转成object对象
string DBData = XmlUtility.GetXmlJson(VRDBUrl);
// 开始转换
JObject ObjDBData = JObject.Parse(DBData);
#region 获得相关的图片数据信息
string ImgData = ObjDBData["VR"]["SceneDB"]["Img"].ToString();
string ProjectId = ObjDBData["VR"]["ProjectId"]["value"].ToString(); // 参数 id
string qytype = ObjDBData["VR"]["ProjectObject"]["ProjectPL"].ToString();// 企业类别
#region 进行判断企业文件名称
bool CheckQyType = VR720Bll.SceneService.HasChinese(qytype);
if (CheckQyType)
{
Models.Journal.WiteJournal("企业类别包含数字" + qytype);
return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "11", Data = "企业类别为汉子" } };
}
else
{
// 如果是非汉子创建文件 FacType
#region 创建logo文件夹
string CreateFaceType = VR720Bll.SceneService.CreateFacType(qytype, VRDBLogoUrl);
if (CreateFaceType == "0")
{
}
else if (CreateFaceType == "1")
{
//logo 不存在
Models.Journal.WiteJournal("logo不存在" + Id);
return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "12", Data = "logo.png不存在" } };
}
else if (CreateFaceType == "2")
{
Models.Journal.WiteJournal("logo拷贝错误" + Id);
return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "13", Data = "logo.png拷贝出现错误,请重试" } };
}
#endregion
}
#endregion
if (Id != ProjectId)
{
Models.Journal.WiteJournal("工程项目编号不一致" + Id);
return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "10", Data = "工程项目编号不一致" } };
}
else
{
Object ImgObjData = new Object();
ImgObjData = JsonConvert.DeserializeObject(ImgData, ImgObjData.GetType()); // Object 对象
Object Img2Obj = JsonConvert.DeserializeObject(ImgData);//obj 转换json格式的字符串为obj对象
#region 数据对象的转换
var ImgObjDataDB = new[]{
new {ImgBitId ="",ImgSceneName= "",ImgSceneX = "",ImgSceneY = "",ImgSceneZ = "",ImgSceneHole = "",LookOrder = "",LookOrderOne = "",ImgBase64 ="",ProjectId ="" }
};
ImgObjDataDB = JsonConvert.DeserializeAnonymousType(ImgData, ImgObjDataDB); // 在这里转为对象
#endregion
#region 判断是否存在的 判断是第一次请求环视非第一次请求
bool CheckProjectId = false; //
CheckProjectId = VR720Bll.SceneService.CheckProject(ProjectId);
#endregion
#region 循环数据信息
if (CheckProjectId == false)
{
foreach (var item in ImgObjDataDB)
{
#region 开始进行图片的base64 计划
// 根据a 进行循环
try
{
string Imagefilename = CreateZipUrl + "\\" + item.ImgBitId + ".jpg";
using (Bitmap bmp = new Bitmap(Imagefilename))
{
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();
string base1 = "data:image/jpeg;base64," + Convert.ToBase64String(arr);
#region 进行数据的插入
VR720Bll.SceneService.AddScene(item.ImgBitId, item.ImgSceneName, item.ImgSceneX, item.ImgSceneY, item.ImgSceneZ, item.ImgSceneHole, item.LookOrder, item.LookOrderOne, base1, ProjectId);
#endregion
}
}
catch (Exception)
{
}
#endregion
}
}
#endregion
#region 请求生成密钥 配合ProjectId工程项目id 时间 Tooken
string HKey = VR720Bll.SceneService.AddHideKey(ProjectId, Tooken);
if (HKey == "")
{
return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "5" } };
}
else
{
//返回地址和密钥
return VR720Bll.SceneService.GetUrl(HKey, qytype);
}
#endregion
}
#endregion
}
else
{
Models.Journal.WiteJournal("请求的压缩文件不存在" + Url);
return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "4" } };
}
#endregion
}
else
{
Models.Journal.WiteJournal("请求文件地址不存在" + Url);
Models.Journal.WiteJournal("开始文件资源检查结束");
//文件夹不存在
return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "3" } };
}
#endregion
}
else { return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "6" } }; }
}
}
public class JsonP
{
public static JObject JsonToString(Object obj, string key)
{
try
{
List<string> JobList = new List<string>();
JObject jo = (JObject)JsonConvert.DeserializeObject(obj.ToString());
//foreach (var item in jo)
//{
//}
return jo;
}
catch (Exception)
{
throw;
}
}
public static string CheckKey(JObject obj, string key)
{
Type type = obj.GetType();
return "";
}
}
/// <summary>
/// 功能:解压文件
/// creator chaodongwang 2009-11-11
/// </summary>
public class UnZipClass
{
/// <summary>
/// 功能:解压zip格式的文件。
/// </summary>
/// <param name="zipFilePath">压缩文件路径</param>
/// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
/// <param name="err">出错信息</param>
/// <returns>解压是否成功</returns>
public static void UnZip(string zipFilePath, string unZipDir)
{
Models.Journal.WiteJournal("解压开始");
if (zipFilePath == string.Empty)
{
throw new Exception("压缩文件不能为空!");
}
if (!File.Exists(zipFilePath))
{
throw new System.IO.FileNotFoundException("压缩文件不存在!");
}
//解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
if (unZipDir == string.Empty)
unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
if (!unZipDir.EndsWith("/"))
unZipDir += "/";
if (!Directory.Exists(unZipDir))
Directory.CreateDirectory(unZipDir);
using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
{
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = Path.GetDirectoryName(theEntry.Name);
string fileName = Path.GetFileName(theEntry.Name);
if (directoryName.Length > 0)
{
Directory.CreateDirectory(unZipDir + directoryName);
}
if (!directoryName.EndsWith("/"))
directoryName += "/";
if (fileName != String.Empty)
{
using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
{
streamWriter.Write(data, 0, size);
}
else
{
break;
}
}
}
}
}
}
Models.Journal.WiteJournal("解压结束");
}
#region 解压缩包(将压缩包解压到指定目录)
/// <summary>
/// 解压缩包(将压缩包解压到指定目录)
/// </summary>
/// <param name="zipedFileName">压缩包名称</param>
/// <param name="unZipDirectory">解压缩目录</param>
/// <param name="password">密码</param>
public static void UnZipFiles(string zipedFileName, string unZipDirectory, string password)
{
using (ZipInputStream zis = new ZipInputStream(File.Open(zipedFileName, FileMode.OpenOrCreate)))
{
if (!string.IsNullOrEmpty(password))
{
zis.Password = password;//有加密文件的,可以设置密码解压
}
ZipEntry zipEntry;
while ((zipEntry = zis.GetNextEntry()) != null)
{
string directoryName = Path.GetDirectoryName(unZipDirectory);
string pathName = Path.GetDirectoryName(zipEntry.Name);
string fileName = Path.GetFileName(zipEntry.Name);
pathName = pathName.Replace(".", "$");
directoryName += "\\" + pathName;
if (!Directory.Exists(directoryName))
{
Directory.CreateDirectory(directoryName);
}
if (!string.IsNullOrEmpty(fileName))
{
FileStream fs = File.Create(Path.Combine(directoryName, fileName));
int size = 2048;
byte[] bytes = new byte[2048];
while (true)
{
size = zis.Read(bytes, 0, bytes.Length);
if (size > 0)
{
fs.Write(bytes, 0, size);
}
else
{
break;
}
}
fs.Close();
}
}
}
}
#endregion
}
}