快捷搜索:  汽车  科技

服务端如何取表单数据和json数据(NETEFMVC接口提交数据或返回json串时压缩和解压方法)

服务端如何取表单数据和json数据(NETEFMVC接口提交数据或返回json串时压缩和解压方法)/// <returns></Returns>/// <param name="param"></param>/// <summary>/// 压缩/// </summary>

NET EF MVC开发接口在上传文件时,或者提交数据或返回json串较大时,需要用到压缩和解压方法,下面给个操作实例,以供参考 :

服务端如何取表单数据和json数据(NETEFMVC接口提交数据或返回json串时压缩和解压方法)(1)

一、压缩和解压方法

public static class ZipUtil

{

/// <summary>

/// 压缩

/// </summary>

/// <param name="param"></param>

/// <returns></Returns>

public static string Compress(string param)

{

byte[] data = System.Text.Encoding.UTF8.GetBytes(param);

//byte[] data = Convert.FromBase64String(param);

MemoryStream ms = new MemoryStream();

Stream stream = new ICSharpCode.SharpZipLib.Bzip2.BZip2OutputStream(ms);

try

{

stream.Write(data 0 data.Length);

}

finally

{

Stream.Close();

ms.Close();

}

return Convert.ToBase64String(ms.ToArray());

}

/// <summary>

/// 解压

/// </summary>

/// <param name="param"></param>

/// <returns></returns>

public static string Decompress(string param)

{

string commonString = "";

byte[] buffer = Convert.FromBase64String(param);

MemoryStream ms = new MemoryStream(buffer);

Stream sm = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(ms);

//这里要指明要读入的格式,要不就有乱码

StreamReader reader = new StreamReader(sm System.Text.Encoding.UTF8);

try

{

commonString = reader.ReadToEnd();

}

finally

{

sm.Close();

ms.Close();

}

return commonString;

}

/// <summary>

/// 压缩文件

/// </summary>

/// <param name="sourceFilePath">文件路径</param>

/// <param name="destinationZipFilePath">压缩后的地址</param>

public static void CreateZip(string sourceFilePath string destinationZipFilePath)

{

if (sourceFilePath[sourceFilePath.Length - 1] != System.IO.Path.DirectorySeparatorChar)

sourceFilePath = System.IO.Path.DirectorySeparatorChar;

ZipOutputStream zipStream = new ZipOutputStream(System.IO.File.Create(destinationZipfilePath));

zipStream.SetLevel(6); // 压缩级别 0-9

CreateZipFiles(sourceFilePath zipStream);

zipStream.Finish();

zipStream.Close();

}

/// <summary>

/// 递归压缩文件

/// </summary>

/// <param name="sourceFilePath">待压缩的文件或文件夹路径</param>

/// <param name="zipStream">打包结果的zip文件路径(类似 D:\WorkSpace\a.zip) 全路径包括文件名和.zip扩展名

/// <param name="staticFile"></param>

private static void CreateZipFiles(string sourceFilePath ZipOutputStream zipStream)

{

Crc32 crc = new Crc32();

string[] filesArray = Directory.GetFileSystemEntries(sourceFilePath);

foreach (string file in filesArray)

{

//如果当前是文件夹,递归

if (Directory.Exists(file))

{

CreateZipFiles(file zipStream);

}

//如果是文件,开始压缩

else

{

FileStream fileStream = System.IO.File.OpenRead(file);

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

fileStream.Read(buffer 0 buffer.Length);

string tempFile = file.Substring(sourceFilePath.LastIndexOf("\\") 1);

ZipEntry entry = new ZipEntry(tempFile);

entry.DateTime = DateTime.Now;

entry.Size = fileStream.Length;

fileStream.Close();

crc.Reset();

crc.Update(buffer);

entry.Crc = crc.Value;

zipStream.PutNextEntry(entry);

zipStream.Write(buffer 0 buffer.Length);

}

}

}

}

二、解压方法

[HttpPost]

public HttpResponseMessage OffLineAddtransferrecord(object data)

{

HttpResponseMessage result = null;

var ReturnStr = "{\"status\":\"N\" \"msg\":\"参数有误\" \"data\":[]}";

List<M_transferrecord> list = new List<M_transferrecord>();

string Sdata = data.ToString();

var admin = JsonConvert.DeserializeObject<dynamic>(Sdata);//动态对象

string compressdata = null;

if (admin.compressdata != null)

{

compressdata = admin.compressdata;

#region 解压

compressdata = ZipUtil.Decompress(compressdata);

list = JsonConvert.DeserializeObject<List<M_transferrecord>>(compressdata);//动态对象

#endregion 解压

}

//string Sdata = data.ToString();

//List<M_transferrecord> list = JsonConvert.DeserializeObject<List<M_transferrecord>>(Sdata);//动态对象

transactionOptions transactionOption = new TransactionOptions();

//设置事务隔离级别

transactionOption.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;

// 设置事务超时时间为60秒

transactionOption.Timeout = new TimeSpan(0 0 30);

using (TransactionScope trans = new TransactionScope(TransactionScopeOption.Required transactionOption)) //需要事务回滚的地方外面套一层using (TransactionScope sc = new TransactionScope()){}

{

try

{

if (list != null && list.Count > 0)

{

string address = null;

List<M_returntransferrecord> returnlist = new List<M_returntransferrecord>();

foreach (var carditem in list)

{

#region 操作

gpt_Kindergartentransfercard cardModel = ef.gpt_Kindergartentransfercard.Where(a => a.TrialID == carditem.TrialID && a.KindergartenID == carditem.KindergartenID && a.NewEnrolmentID == carditem.NewEnrolmentID && a.transfercardnumber == carditem.transfercardnumber && a.parenttransfercardID == carditem.parenttransfercardID).AsNoTracking().FirstOrDefault();

if (cardModel != null)

{

string photourl = "/gpt001/" "/" carditem.KindergartenID "/transferrecord/" carditem.recordtime.ToString("yyyyMMdd") "/" Guid.NewGuid().ToString() ".jpg";

gpt_transferrecord dd = ef.gpt_transferrecord.Where(a => a.type == carditem.type && a.TrialID == carditem.TrialID && a.KindergartenID == carditem.KindergartenID && a.NewEnrolmentID == carditem.NewEnrolmentID && a.recordtime.Year == carditem.recordtime.Year && a.recordtime.Month == carditem.recordtime.Month && a.recordtime.Day == carditem.recordtime.Day).AsNoTracking().FirstOrDefault();

if (dd == null)

{

decimal transferrecordID = WisdomStarts.Common.Utils.GenerateIntID();

gpt_transferrecord recordmodel = new gpt_transferrecord();

recordmodel.transferrecordID = transferrecordID;

recordmodel.parenttransfercardID = cardModel.parenttransfercardID;

recordmodel.transfercardnumber = carditem.transfercardnumber;

recordmodel.weekname = WisdomStarts.Common.Utils.GetWeekNameByDate(carditem.recordtime 0);

recordmodel.strBase64 = carditem.strBase64;

ef.gpt_transferrecord.Add(recordmodel);

int res = ef.SaveChanges();

if (res > 0)

{

#region 更新考勤信息

new WisdomStars.Bll.Common.Attendance().UpdateAttendanceToddlerssigninBytransfercard(recordmodel.recordtime carditem.type carditem.NewEnrolmentID carditem.Kinder_Class_ID carditem.KindergartenID carditem.TrialID (int)WisdomStarts.Common.Enums.KeyEnum.datasources.终端设备);

#endregion 更新考勤信息

#region 异步上传图片

var postUrl = "http://127.0.0.1/Common/SaveCatalogBase64Image";

Webrequest Request7 = WebRequest.Create(postUrl);

request7.Method = "POST";

//post传参数

string postdata = "strBase64=" HttpContext.Current.Server.UrlEncode(carditem.strBase64) "&subsidiary_id=" carditem.subsidiary_id "&KindergartenID=" carditem.KindergartenID "&imageDir=" photourl;

byte[] bytes = Encoding.ASCII.GetBytes(postdata);

request7.Timeout = 5000;

request7.ContentType = "application/x-www-form-urlencoded";

request7.ContentLength = postdata.Length;

Stream sendStream = request7.GetRequestStream();

sendStream.Write(bytes 0 bytes.Length);

sendStream.Close();

//得到返回值

//WebResponse response7 = request7.GetResponse();

//string OrderQuantity = new StreamReader(response7.GetResponseStream() Encoding.GetEncoding("utf-8")).ReadToEnd();

//var json = JsonConvert.DeserializeObject<dynamic>(OrderQuantity);

//photourl = json.photourl;

#endregion

M_returntransferrecord info = new M_returntransferrecord();

info.type = carditem.type;

info.transfercardnumber = carditem.transfercardnumber;

info.recorddate = recordmodel.recordtime.ToString("yyyy-MM-dd");

returnlist.Add(info);

}

}

else

{

//其它业务逻辑

}

}

#endregion

}

if (returnlist.Count > 0)

{

trans.Complete();

ReturnStr = "{\"status\":\"Y\" \"msg\":\"操作成功\" \"data\":" returnlist.ToEnJsonString() "}";

}

else

{

trans.Complete();

ReturnStr = "{\"status\":\"N\" \"msg\":\"操作失败\" \"data\":" returnlist.ToEnJsonString() "}";

}

}

}

catch (Exception e)

{

trans.Dispose();

}

}

result = new HttpResponseMessage { Content = new StringContent(ReturnStr Encoding.GetEncoding("UTF-8") "application/json") };

return result;

}

猜您喜欢: