AngularJS + WCF REST 文件上传
AngularJS + WCF REST File Upload
我有一个关于从 AngularJS 客户端应用程序将文件上传到 WCF REST 服务的问题。上传的文件随后应存储在 Azure Blob 存储中。
目前,该实现适用于文本和 pdf 文件,但我无法使用图像文件。图片和其他类型的数据在实际上传后损坏。
所以我想向您展示准则的相关部分。在 AngularJS 应用程序中,我使用 HTML5 文件 - Api 到 select 文件。之后,我使用 AngularJS 服务,它获取文件并执行 Post-Request:
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把文件保存在Server端的文件系统上。问题正如我上面提到的,这种方法适用于 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>
以便传输更大的文件。所以我的问题是,为什么图像传输会导致文件损坏。你有什么主意吗?可能是因为请求的内容类型?
刚刚看到,我的问题还没有得到解答。对于那些遇到同样问题的人,很可能您必须使用 Multipart-Parser 来获取实际的文件内容。如果通过 HTML File-API.
选择,流还包含元数据,如内容类型、文件名等
我有一个关于从 AngularJS 客户端应用程序将文件上传到 WCF REST 服务的问题。上传的文件随后应存储在 Azure Blob 存储中。 目前,该实现适用于文本和 pdf 文件,但我无法使用图像文件。图片和其他类型的数据在实际上传后损坏。 所以我想向您展示准则的相关部分。在 AngularJS 应用程序中,我使用 HTML5 文件 - Api 到 select 文件。之后,我使用 AngularJS 服务,它获取文件并执行 Post-Request:
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把文件保存在Server端的文件系统上。问题正如我上面提到的,这种方法适用于 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>
以便传输更大的文件。所以我的问题是,为什么图像传输会导致文件损坏。你有什么主意吗?可能是因为请求的内容类型?
刚刚看到,我的问题还没有得到解答。对于那些遇到同样问题的人,很可能您必须使用 Multipart-Parser 来获取实际的文件内容。如果通过 HTML File-API.
选择,流还包含元数据,如内容类型、文件名等