我有一个需要接受文件的API方法。我正在使用Postman chrome插件来调用api并附加一个文件。
我在创建一个初始的MVC网站后,为我的MVC项目添加了API功能。我不知道我是否错过了一些配置,但我的其他API调用只是没有得到任何文件。
这是代码
[Route("~/api/mediaitems/{token}/{eventId}")]
public async Task<HttpResponseMessage> MediaItems(string token, int eventId, HttpPostedFileBase upload)
{
if (upload.ContentLength > 0)
{
string _targetFolder = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FilePath"]);
string _targetPath = Path.Combine(_targetFolder, Guid.NewGuid() + Path.GetFileName(upload.FileName));
upload.SaveAs(_targetPath);
var mediaItem = new MediaItem
{
MediaFilePath = _targetPath,
FileType = upload.FileName,
EventId = eventId,
CreatedDate = DateTime.Now.Date
};
//Save mediaItem
_repo.SaveMediaItem(mediaItem);
return Request.CreateResponse(HttpStatusCode.Created);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
http://localhost:24727/api/mediaitems/12341254234/1
这是网址,然后我将.jpg附加到邮递员正文。 当我运行api请求时,它永远不会有文件因此它永远无法保存。
答案 0 :(得分:0)
你可以从这样的事情开始:
[Route("~/api/mediaitems/{token}/{eventId}")]
public async Task<HttpResponseMessage> MediaItems(string token, int eventId)
{
byte[] data = await this.Request.Content.ReadAsByteArrayAsync();
//data will contain the file content, you can save it here
return Request.CreateResponse(HttpStatusCode.Created);
}
请注意我是如何删除HttpPostedFileBase upload
参数的。
如果需要,您可以根据this.Request.Content
进行一些验证。例如,您可能想要检查内容长度。
答案 1 :(得分:0)
那是ApiController
吗? Web API中没有HttpPostedFile
。
您必须使用其他方法:How to post file to ASP.NET Web Api 2
答案 2 :(得分:0)
也许有帮助...将以下内容添加到web.config中。您必须以字节为单位设置文件的最大可接受大小:15728640 = 15MB
<configuration>
<location path="Custommer/edit">
<system.web>
<httpRuntime maxRequestLength="15728640"/>
</system.web>
</location>
</configuration>