2015-03-04 4 views
1

У меня есть вопрос о загрузке файлов в службу 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> 

Так что передача больших файлов работает. Поэтому мой вопрос заключается в том, почему передача изображений приводит к повреждению файлов. Есть ли у вас какие-либо идеи? возможно, из-за типа содержимого запроса?

ответ

1

Только что увидел, что мой вопрос по-прежнему остается без ответа. Для тех, кто сталкивается с одной и той же проблемой, скорее всего, вам нужно использовать Multipart-Parser для получения фактического содержимого файла. В потоке также содержатся метаданные, такие как тип содержимого, имя файла и т. Д., Если они выбраны с помощью HTML File-API.

Смежные вопросы