C# AngularJS+;WCF REST文件上载

C# AngularJS+;WCF REST文件上载,c#,angularjs,wcf,rest,stream,C#,Angularjs,Wcf,Rest,Stream,我有一个关于从AngularJS客户端应用程序上传文件到WCF REST服务的问题。上载的文件随后应存储在Azure Blob存储中。 目前,该实现适用于文本和pdf文件,但我不认为它适用于图像文件。图像和其他类型的数据在实际上传后被损坏。 因此,我想向您展示代码的相关部分。在AngularJS应用程序中,我使用HTML5文件Api来选择文件。之后,我使用AngularJS服务,它获取文件并执行Post请求: srv.uploadFile = function(id, file){ re

我有一个关于从AngularJS客户端应用程序上传文件到WCF REST服务的问题。上载的文件随后应存储在Azure Blob存储中。 目前,该实现适用于文本和pdf文件,但我不认为它适用于图像文件。图像和其他类型的数据在实际上传后被损坏。 因此,我想向您展示代码的相关部分。在AngularJS应用程序中,我使用HTML5文件Api来选择文件。之后,我使用AngularJS服务,它获取文件并执行Post请求:

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>


这样更大文件的传输就可以正常工作了。所以我的问题是,为什么图像传输会导致文件损坏。你知道吗?可能是因为请求的内容类型吗?

刚刚看到,我的问题仍然没有答案。对于那些面临相同问题的人,很可能必须使用多部分解析器来获取实际的文件内容。如果通过HTML文件API选择,则流还包含元数据,如内容类型、文件名等