Загрузить файл из HTML-формы (multipart / form-data) в службу WCF REST в виде потока без потоковой передачи входных данных всей формы?
В настоящее время у меня возникла проблема при загрузке файла из HTML в мою службу отдыха (WCF REST). При загрузке файла я хотел бы отправить информацию, такую как заголовок и описание, вместе с содержанием файла.
Итак, я создал тестовую форму, как это:
<form id="testForm" action="http://localhost.:1576/NotepadService.svc/Note/91f6413c-4d72-42ca-a0f3-38df15759fc9/Attachment" method="POST" enctype="multipart/form-data">
<table>
<tr><td>Title:</td><td><input type="text" name="Title"></td></tr>
<tr><td>Description:</td><td><input type="text" name="Description"></td></tr>
<tr><td>Filename:</td><td><input type="text" name="Filename"></td></tr>
<tr><td>File:</td><td><input type="file" name="Contents"></td></tr>
<tr><td/><td><input type="submit" value="Send"></td></tr>
</table>
</form>
На стороне сервера, я хотел бы перевести его на этот метод:
[OperationContract]
[WebInvoke(
BodyStyle = WebMessageBodyStyle.Bare,
Method = "POST",
UriTemplate = "/Note/{noteId}/Attachment")]
[Description("Add an attachment to a Note.")]
void AddAttachmentToNote(string noteId, AttachmentRequestDto attachmentRequestDto);
С AttachmentRequestDto, определенным как
[DataContract]
public class AttachmentRequestDto
{
[DataMember]
public string Title { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public string Filename { get; set; }
[DataMember]
public Stream Contents { get; set; }
}
Короче говоря, я бы хотел получить заголовок и описание в виде строковых значений, а содержимое файла - в виде потока. Это не похоже на работу, так как HTML-форма помещает все содержимое формы (а также заголовок и описание) в поток вместе с содержимым файла. Поэтому, определяя мой метод REST как
[OperationContract]
[WebInvoke(
BodyStyle = WebMessageBodyStyle.Bare,
Method = "POST",
UriTemplate = "/Note/{noteId}/Attachment")]
[Description("Add an attachment to a Note.")]
void AddAttachmentToNote(string noteId, Stream formContents);
работает, но затем мне нужно проанализировать поток, чтобы получить все мои данные (что не очень хороший подход по сравнению с тем, что я на самом деле хочу сделать).
Может быть, мне нужно определить 2 различных метода обслуживания, один из которых принимает только файл, а другой принимает данные файла? Это, однако, означало бы, что мои бизнес-правила (требуется заголовок + требуется содержимое файла) должны проверяться по-разному (так как REST не имеет состояния).
Кое-что, о чем стоит упомянуть: мне нужно сохранить содержимое файла в базе данных, а не в файловой системе.
Кто-нибудь имеет какой-либо вклад в этот? Я застрял на этом ...
Спасибо!