我正在努力将文件附加到我正在构建的消息系统中,我们正在使用Kendo浏览器来获取文件及其上传方法。我遇到的问题是,当我成功上传要作为附件模型发送的文件,并将其传递回发送消息的服务时,我将丢失保存字节数组和mime的模型的Data属性类型。
这是我执行kendo-Uploader魔法的控制器动作
public ActionResult SaveDocumentFile(HttpPostedFileBase DocumentFile)
{
AttachmentModel attachmentModel = new AttachmentModel();
attachmentModel.DocumentFile = new DocumentFileModel();
attachmentModel.DocumentFile.Data = FileManager.GetFileData(DocumentFile);
attachmentModel.DocumentFile.MimeType = DocumentFile.ContentType;
attachmentModel.FileName = DocumentFile.FileName;
return Json(attachmentModel);
}
这将获取文件选择的结果,并将其作为附件模型发送回客户端,并将其填充到视图模型中。
以下是发送我的消息的我的控制器操作
public ActionResult SendMessage(SecureMessageViewModel messageView)
{
if (messageView == null)
messageView = new SecureMessageViewModel();
if (messageView.SecureMessage == null)
messageView.SecureMessage = new SecureMessageModel();
if(messageView.Attachment == null)
messageView.Attachment = new AttachmentModel();
if (messageView.Attachment.DocumentFile == null)
messageView.Attachment.DocumentFile = new DocumentFileModel();
IList<AttachmentModel> attachmentList = new List<AttachmentModel>();
attachmentList.Add(messageView.Attachment);
return Json(staffMessagingService.SendMessage(messageView.SecureMessage, attachmentList), JsonRequestBehavior.AllowGet);
}
这会将安全消息模型和附件模型传递给服务层,因为服务层检查Data(Attachment模型上的属性)并在没有数据的情况下抛出异常,服务层就是崩溃的地方,在这种情况下没有,即使它出现在html-&gt; Angular-&gt;到HTTP流中。然后它进入虚空。
当我在客户端上使用save方法时,我看到我的视图模型中的附件模型加载了mime类型和字节数组。 当我在控制器上打破发送消息视图时,附件具有mime类型但没有数据。 我在调试器中调用了一个请求,可以看到http流中的数组,但是我的模型没有绑定到它。
有没有人遇到过类似的问题?如果是这样,问题是什么,到目前为止谷歌一直没有帮助。
答案 0 :(得分:0)
我有一种感觉这不是最好的解决方案,但我确实找到了解决办法,我在附件模型中添加了一个字符串属性,并将字节数组转换为字符串,然后再将其发送回客户端。然后我将它转换回send方法中的数组,然后再将其推送到服务器。这让我超越了我的数组没有绑定到我的模型的事实。 我用来转换的方法是HttpServerUtility.UrlTokenDecode和编码方法。