我创建了一个名为Event
的课程。我的Event
类包含Documents
列表。 Document
是我创建的另一个类。每个Document
类都包含一个名为DocumentData
的类,该类具有FileData
类型byte[]
的属性。
所以它看起来像这样:
myEventObj.Documents[0].DocumentData.FileData
现在,接受新的Events
的我的控制器只接受json数据,除了FileData
之外,这对我的Event类中的所有内容都很好。
我有另一个接受文件上传的控制器。问题是,我没有简单的方法来链接我的第二个控制器接受的二进制文件数据,并将其与发送到我的第一个控制器的FileData
Event
属性配对。如何将它们组合在一起,以便只有一次调用我的Web服务来保存Event
以及任何文件数据?
这是我的事件控制器的Post和Put功能:
[HttpPost]
public IHttpActionResult Post(Event coreEvent) {
coreEvent.PrepareToPersist();
_unitOfWork.Events.Add(coreEvent);
_unitOfWork.Complete();
return Created("api/events/" + coreEvent.EventId, coreEvent);
}
[HttpPut]
public IHttpActionResult Put(Event coreEvent) {
coreEvent.PrepareToPersist();
_unitOfWork.Events.Update(coreEvent);
_unitOfWork.Complete();
return Ok(coreEvent);
}
这是我的控制器的Post函数,用于处理文件上传:
[HttpPost]
public async Task<IHttpActionResult> Post() {
if (!Request.Content.IsMimeMultipartContent()) {
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider = new MultipartMemoryStreamProvider();
try {
await Request.Content.ReadAsMultipartAsync(provider);
foreach (var file in provider.Contents) {
string filename = file.Headers.ContentDisposition.FileName.Trim('\"');
byte[] buffer = await file.ReadAsByteArrayAsync();
}
return Ok();
}
catch (System.Exception e) {
return InternalServerError(e);
}
}
我如何把它们放在一起?
答案 0 :(得分:0)
通常我更喜欢两种方法来支持多个ajax上传文件,所以第二种方法将支持Ajax上传文件,并在将其保存到服务器上的某个位置并添加一个后,将为上传的文件返回一个唯一的密钥。在数据库中记录它(例如:附件表),
当你调用第一个冒充事件的方法时,你的对象myEventObj.Documents [0] .DocumentData.FileData将包含来自第二种方法的返回键,所以你的对象可能是myEventObj.Documents作为字符串列表(文件键)
由于