在成功实现了ajaxpost之后,由于这篇漂亮的文章,上传了模型对象甚至复杂对象,
新的目标是实现更复杂的场景
我试图通过搜索google的代码示例来实现这个问题,但没有一个具体和正确的答案
目标是让多用途(多数据类型)数据从客户端传输到服务器(无需使用表单或HttpRequestBase),以最有效的方式传递原始字节数组(我知道可以实现新协议HTTP/2或谷歌)
协议缓冲区-谷歌的数据交换格式
[HttpPost]
公共JsonResult上载文件(字节[]parUploadBytearry)
{
}
最好是一个模型,其属性之一是字节[]
[HttpPost]
公共[JsonResult/ActionResult]上传(SomeClassWithByteArray parDataModel)
{
}
ajax http Post签名:
日志(“AajaxNoPostBack准备post->;”+targetUrl);
$.ajax({
键入:“POST”,
url:targetUrl,
数据:mods,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:成功的功用。。
});
我也不顾一切地尝试了这种变通方法
公共JsonResult上载文件(对象parUploadBytearry)
{
if(parUploadBytearry==null)
返回null;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf=new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
var pathtosave=System.IO.Path.Combine(Server.MapPath(“~/Content/upload”),“Test11.png”);
使用(System.IO.MemoryStream ms=new System.IO.MemoryStream())
{
序列化(ms,预上传文件);
var Barr=ToArray女士();
var s=new System.Web.Utils.FileFromBar(pathtosave,BR);
}
}
由于它在将数据(.png)成功保存到系统中的文件的过程中一直发布和接收数据,因此数据不合法
在对象到字节数组尝试之前的最后一次sane尝试是msdn代码示例1
传递C#能够理解的字节数组的正确方法是什么?
(对于文档raw byte[]或类似于png图像的文件)
传递字节数组的正确方法是什么
从WebAPI中读取字节[]而无需为“应用程序/八位字节流”编写自定义MediaTypeFormatter的最简单方法是从请求流手动读取:
[HttpPost]
公共异步任务<;JsonResult>;上载文件()
{
byte[]bytes=wait Request.Content.ReadAsByteArrayAsync();
}
在另一篇文章中,我描述了如何利用WebAPI 2.1中存在的BSON(二进制JSON)内置格式化程序
如果您确实想读写一个回答“应用程序/八位字节流”的BinaryMediaTypeFormatter,一个简单的实现如下所示:
公共类二进制MediaTypeFormatter:MediaTypeFormatter
{
私有静态只读类型supportedType=typeof(字节[]);
公共二进制MediaTypeFormatter()
{
添加(新的MediaTypeHeaderValue(“应用程序/八位字节流”);
}
公共覆盖布尔CanReadType(类型)
{
返回类型==supportedType;
}
公共重写bool CanWriteType(类型)
{
返回类型==supportedType;
}
公共重写异步任务<;对象>;ReadFromStreamAsync(类型、流、,
HttpContent,IFormatterLogger格式记录器)
{
使用(var memoryStream=new memoryStream())
{
等待流.CopyToAsync(memoryStream);
返回memoryStream.ToArray();
}
}
公共重写任务WriteToStreamAsync(类型、对象值、流、,
HttpContent内容,TransportContext(TransportContext)
{
如果(值==null)
抛出新的ArgumentNullException(“值”);
如果(!type.IsSerializable)
抛出新的序列化异常(
$“类型{Type}未标记为可序列化”);
var binaryFormatter=新的binaryFormatter();
序列化(流,值);
返回Task.FromResult(true);
}
}