У меня есть вопрос о загрузке файлов в службу WCF REST из приложения на стороне клиента AngularJS. Затем загруженный файл должен храниться в хранилище Azure Blob. На данный момент реализация работает для текстовых и pdf-файлов, но я не получаю эту работу с Image-Files. Изображения и другие типы данных повреждены после фактической загрузки. Итак, я хочу показать вам соответствующие части Кодекса. В приложении AngularJS я использую HTML5 File-Api для выбора файла. После этого я использую AngularJS Service, который принимает файл и performes пост-запрос:AngularJS + WCF REST Загрузка файла
srv.uploadFile = function(id, file){
return $http.post(DEV_ENV_CONFIG.BASE_SERVER_URL + '/xml' + '/fileUpload/' + file.name + '/' + id, file,
{withCredentials: true, headers: {'Content-Type': undefined }, transformRequest: angular.identity}).then(function(response){
});
};
На стороне сервера я написал WCF REST службы, которая принимает поток:
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "xml/fileUpload/{fileName}/{expenseId}")]
void FileUploadAsXml(string fileName, string expenseId, Stream Args);
Потом я сначала попытался сохранить файл в серверной файловой системе через FileStream. Проблема, как я упоминал выше, что этот подход работает с файлами PDF, но изображения, а также, например, файлы Excel повреждены и не могут быть открыты. Я также изменил привязку в Web.config к следующему:
<binding name="http"
maxBufferSize="2147483647"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
sendTimeout="00:05:00"
transferMode="Streamed">
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647"/>
<security mode="None">
<transport clientCredentialType="None"/>
</security>
</binding>
Так что передача больших файлов работает. Поэтому мой вопрос заключается в том, почему передача изображений приводит к повреждению файлов. Есть ли у вас какие-либо идеи? возможно, из-за типа содержимого запроса?