0
我有一个Angular应用程序,用Typescript编写,带有一个ASP.Net Web Api后端。我正尝试使用ng-file-upload(请参阅此link以获取详细信息)指令来上传图像文件。预期结束MIME多部分流。 MIME多部分邮件不完整
我在网页API Post方法收到异常:
“ MIME多流意外结束MIME多信息是不完整的。”
我已经完成了我的研究并发现了类似的问题here - 我试图实施Landuber Kassa的答案,但没有成功。
也this虽然我的项目是不是MVC,并在任何情况下它不起作用。
我很新鲜的想法,并会欣赏社区的想法。如果我能指出正确的方向,我很乐意考虑其他选择。
灰
我的.Net Post方法(实施Landuber卡萨的想法):
[RoutePrefix("BeaufortAppStore/api/Image")]
public class ImageController : ApiController
{
#region Methods
#region Posts
[Route("UploadImage")]
[HttpPost]
public async Task<IHttpActionResult> UploadImage()
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider = new MultipartMemoryStreamProvider();
Stream reqStream = Request.Content.ReadAsStreamAsync().Result;
MemoryStream tempStream = new MemoryStream();
reqStream.CopyTo(tempStream);
tempStream.Seek(0, SeekOrigin.End);
StreamWriter writer = new StreamWriter(tempStream);
writer.WriteLine();
writer.Flush();
tempStream.Position = 0;
StreamContent streamContent = new StreamContent(tempStream);
foreach (var header in Request.Content.Headers)
{
streamContent.Headers.Add(header.Key, header.Value);
}
// Read the form data and return an async task.
await streamContent.ReadAsMultipartAsync(provider); // FAILS AT THIS POINT
foreach (var file in provider.Contents)
{
var filename = file.Headers.ContentDisposition.FileName.Trim('\"');
var buffer = await file.ReadAsByteArrayAsync();
//Do whatever you want with filename and its binary data.
}
return Ok();
}
#endregion
#endregion
我的角度控制器的方法:
public upload(): void {
//Create config used in ng-file-upload
var config: IFileUploadConfigFile = {
data: this.file, url: "BeaufortAppStore/api/Image/UploadImage/", method: "POST" };
this._dataService.uploadImage(config).then((result: any) => {
this.thumbnail = result.data;
});
}
我的角视图(为一个指令局部视图) :
<div class="form-group">
<label for="file" class="control-label col-xs-2">Choose a file</label>
<input id="file" type="file" name="file" class="form-control" ngf-select ngf-pattern="'image/*'"
ng-model="vm.file" />
<img style="width:100px;" ngf-thumbnail="thumbnail || '/thumb.jpg'" />
<button type="submit" ng-click="vm.upload()">Upload</button>
感谢您的快速答复。在我尝试之前,你能解释一下这种方法的不同之处。 –
基本上它是一种经过测试的方式来从角度上传中检索多部分上传内容......它从this.Request中采用正确的格式,并使用异步任务生成一个名称(使用随机指导不覆盖或如果有人上传同名的其他图片,请进入例外状态) –
我会告诉你控制器(Angular)和html,如果你需要它的话。确保你的post方法(在chrome控制台上检查它) ..if格式是正确的..如果它不尝试覆盖请求的标题) –