asp.net-mvc – 通过Web Api接收,发送文件
发布时间:2020-05-24 10:21:08 所属栏目:asp.Net 来源:互联网
导读:我正在尝试编写一个接收文件的WebApi服务,执行一个简单的操作,并将文件发回.我在从服务发送和/或接收文件时遇到问题. 我遇到的问题是从服务返回的文件比操作文件大1.5倍,例如当文件被返回时,它就像300kb而不是它应该是200kb. 我认为它被包裹或以某种方式操纵,
|
我正在尝试编写一个接收文件的WebApi服务,执行一个简单的操作,并将文件发回.我在从服务发送和/或接收文件时遇到问题. 我遇到的问题是从服务返回的文件比操作文件大1.5倍,例如当文件被返回时,它就像300kb而不是它应该是200kb. 我认为它被包裹或以某种方式操纵,我不确定如何正确地接收它.下面包含WebAPI服务的代码和调用Web服务的方法 在,WebApi服务,当我点击该行返回Ok(bufferResult)时,该文件是一个字节[253312] 在调用Web服务的方法中,在操作并返回文件之后,在行var content = stream.Result;之后,该流的长度为337754字节. Web API服务代码 public ConversionController: APIController{
public async Task<IHttpActionResult> TransformImage()
{
if (!Request.Content.IsMimeMultipartContent())
throw new Exception();
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
var file = provider.Contents.First();
var filename = file.Headers.ContentDisposition.FileName.Trim('"');
var buffer = await file.ReadAsByteArrayAsync();
var stream = new MemoryStream(buffer);
// [file manipulations omitted;]
// [the result is populated into a MemoryStream named response ]
//debug : save memory stream to disk to make sure tranformation is successfull
/*response.Position = 0;
path = @"C:tempfile.ext";
using (var fileStream = System.IO.File.Create(path))
{
saveStream.CopyTo(fileStream);
}*/
var bufferResult = response.GetBuffer();
return Ok(bufferResult);
}
}
方法调用服务 public async Task<ActionResult> AsyncConvert()
{
var url = "http://localhost:49246/api/conversion/transformImage";
var filepath = "drive/file/path.ext";
HttpContent fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(filepath));
using (var client = new HttpClient())
{
using (var formData = new MultipartFormDataContent())
{
formData.Add(fileContent,"file","fileName");
//call service
var response = client.PostAsync(url,formData).Result;
if (!response.IsSuccessStatusCode)
{
throw new Exception();
}
else
{
if (response.Content.GetType() != typeof(System.Net.Http.StreamContent))
throw new Exception();
var stream = response.Content.ReadAsStreamAsync();
var content = stream.Result;
var path = @"drivecompletedname.ext";
using (var fileStream = System.IO.File.Create(path))
{
content.CopyTo(fileStream);
}
}
}
}
return null;
}
我还是溪流和WebApi的新手,所以我可能会遗漏一些非常明显的东西.为什么文件流的大小不同? (例如,它是否被包裹,如何打开和/或接收流) 解决方法好的,要正确接收文件,我需要更换线路var stream = response.Content.ReadAsStreamAsync(); 同 var contents = await response.Content.ReadAsAsync<Byte[]>(); 为绑定提供正确的类型 所以,调用服务的方法的后半部分看起来像 var content = await response.Content.ReadAsAsync<Byte[]>();
var saveStream = new MemoryStream(content);
saveStream.Position = 0;
//Debug: save converted file to disk
/*
var path = @"drivecompletedname.ext";
using (var fileStream = System.IO.File.Create(path))
{
saveStream.CopyTo(fileStream);
}*/ (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-core – 如何将ASP.NET 5从Beta6升级到Beta7
- asp.net-mvc-3 – 对复选框不起作用的MVC不显眼的验证
- asp.net – 删除HTML或ASPX扩展
- asp.net – 如何添加验证到我的POCO(模板)类
- SimpleModal打破ASP.Net回传
- 是否可以在.NET中将WinForm转换为WebForm?
- asp.net-mvc-3 – ASP.NET MVC重定向到没有物理重定向的操作
- asp.net-mvc – 如何在ASP.NET MVC 3应用程序中处理未捕获的
- asp.net-mvc – 在布局视图中获取当前的ApplicationUser
- asp.net – 为什么%=%在一种情况下工作,但在另一种情况下
推荐文章
站长推荐
- asp.net-mvc-3 – 如何增加会话超时MVC 3
- asp.net-mvc – 如何处理具有多个聚合根的视图模
- asp.net-mvc-5 – 依赖注入结构图ASP.NET Identi
- asp.net – 点击按钮禁用
- asp.net-mvc – 在Azure中预编译ASP.NET MVC项目
- asp.net – AWS SNSClient发布请求的超时错误
- ASP.NET linkbutton两次提高onBeforeUnload事件
- 在asp.net中读取查询字符串而不指定任何页面名称
- asp.net-mvc – 用于字符串的ASP.NET MVC显示模板
- ASP.NET MVC 3:添加控制器时自动生成视图(无实体
热点阅读
