Система представляет собой приложение Flex, взаимодействующее с веб-службой WCF REST.Я пытаюсь загрузить файл из приложения Flex на сервер и сталкиваюсь с некоторыми проблемами, которые, я надеюсь, кто-то здесь сможет помочь.Я использую FileReference в приложении Flex для просмотра и загрузки файла, как определено здесь:
http://blog.flexexamples.com/2007/09/21/uploading-files-in-flex-using-the-filereference-class/
Затем я получаю файл в виде потока (отображается как System.ServiceModel.Dispatcher.StreamFormatter.MessageBodyStream в отладчике) в веб-службе REST WCF (с использованием типа проекта службы REST WCF 4)
[WebInvoke(Method = "POST", UriTemplate = "_test/upload")]
public void UploadImage(Stream data)
{
// TODO: just hardcode filename for now
var filepath = HttpContext.Current.Server.MapPath(@"~\_test\testfile.txt");
using (Stream file = File.OpenWrite(filepath))
{
CopyStream(data, file);
}
}
private static void CopyStream(Stream input, Stream output)
{
var buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
Примечание: метод CopyStream, используемый в этом сообщении: Как мнесохранить поток в файл в C #?
Файл сохраняется без проблем.У меня проблема в том, что файл содержит больше информации, чем мне бы хотелось.Вот содержимое сохраненного файла (где исходный файл содержал только «ЭТО СОДЕРЖАНИЕ ФАЙЛА»):
------------ae0ae0Ef1ae0Ef1ae0gL6gL6Ij5cH2
Content-Disposition: form-data; name="Filename"
testfile.txt
------------ae0ae0Ef1ae0Ef1ae0gL6gL6Ij5cH2
Content-Disposition: form-data; name="Filedata"; filename="testfile.txt"
Content-Type: application/octet-stream
THIS IS THE CONTENT OF THE FILE
------------ae0ae0Ef1ae0Ef1ae0gL6gL6Ij5cH2
Content-Disposition: form-data; name="Upload"
Submit Query
------------ae0ae0Ef1ae0Ef1ae0gL6gL6Ij5cH2--
Содержимое выглядит точно так же, как описано в документации Adobe: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html
Есть ли в C # какие-либо средства для получения содержимого файла из Stream?
РЕДАКТИРОВАТЬ (3/24 20:15) : то, что отправляет приложение Flex, - это составная форма POST.Как можно декодировать данные составного тела, представленные параметром Stream, и вырезать части составного тела?
РЕДАКТИРОВАТЬ (3/25 10:00) : еще несколько сообщений переполнения стекасвязанные с этим:
Служба WCF для приема многосоставных данных / данных формы в формате
Отправка многостраничных данных / данных формы в службу REST WCF: действие изменяется
РЕДАКТИРОВАТЬ (3/25 10:45 утра) : Найден многочастный синтаксический анализатор, который работает очень хорошо:
http://antscode.blogspot.com/2009/11/parsing-multipart-form-data-in-wcf.html
Заранее спасибо.