使用 Microsoft.Net.Http 将文件发送到服务
Posted
技术标签:
【中文标题】使用 Microsoft.Net.Http 将文件发送到服务【英文标题】:Send file to service using Microsoft.Net.Http 【发布时间】:2013-10-09 01:57:55 【问题描述】:我有一个方法:
private bool UploadFile(Stream fileStream, string fileName)
HttpContent fileStreamContent = new StreamContent(fileStream);
using (var client = new HttpClient())
using (var formData = new MultipartFormDataContent())
formData.Add(fileStreamContent, fileName, fileName);
var response = client.PostAsync("url", formData).Result;
return response.StatusCode == HttpStatusCode.OK;
这是将文件发送到 WCF 服务,但是查看帖子的 Wireshark 日志,没有附加 fileStream,只是附加了文件名。我需要做其他事情吗?
【问题讨论】:
【参考方案1】:原来 fileStream 没有进入该方法。使用context.Request.Files[0].InputStream
似乎是罪魁祸首。使用 .SaveAs 然后将其作为 byteArray 读取并将其附加到 MultiPartFormDataContent 有效。
【讨论】:
【参考方案2】:使用ByteArrayContent
而不是流内容。
var fileContent = new ByteArrayContent(File.ReadAllBytes(fileName));
然后指定您的内容处置标题:
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
FileName = fileName
;
formData.Add(fileContent);
【讨论】:
我确实最终这样做了,但是因为我最终将文件保存到磁盘,然后照此读取。您只能追加当前保存到磁盘的文件吗?我试图避免这样做,这就是我附加流的原因。 所以结果方法参数中不需要Stream fileStream,对吧? @rob-g 我能找到一个完整的工作示例吗?以上是关于使用 Microsoft.Net.Http 将文件发送到服务的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft.Net.Http 与 Microsoft.AspNet.WebApi.Client
System.Net.Http 与 Microsoft.Net.Http 的当前状态
5 .NET HTTP 库 - Microsoft.Net.Http 适合哪里?