我目前正使用ASP.NET核心RC-1通过kendo fileuploader将文件上传到api控制器。我收到一个周期性错误"对象引用未设置为对象的实例"尝试使用IFormFile.OpenReadStream()打开流后读取流。
我的控制器是:
[HttpPost]
[Route("api/{domain}/[controller]")]
public async Task<IActionResult> Post([FromRoute]string domain, [FromForm]IFormFile file, [FromForm]WebDocument document)
{
if (ModelState.IsValid)
{
if (file.Length > 0)
{
var userName =
Request.HttpContext.User.Claims
.FirstOrDefault(c => c.Type == ClaimTypesEx.FullName)?
.Value;
var uploadedFileName =
ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
document.Domain = domain;
document.MimeType = file.ContentType;
document.SizeInBytes = file.Length;
document.ChangedBy = userName;
document.FileName = (string.IsNullOrEmpty(document.FileName)) ? uploadedFileName : document.FileName;
try
{
document = await CommandStack.For<WebDocument>()
.AddOrUpdateAsync(document, file.OpenReadStream()).ConfigureAwait(false);
}
catch (Exception e)
{
return new HttpStatusCodeResult(500);
}
return Ok(document);
}
}
return new BadRequestResult();
}
当我真正尝试在流进入blob存储时读取流时,会抛出错误:
public async Task<Uri> CreateOrUpdateBlobAsync(string containerName, string fileName, string mimeType,
Stream fileStream)
{
var container = Client.GetContainerReference(containerName);
var blob = container.GetBlockBlobReference(fileName);
//Error HERE
await blob.UploadFromStreamAsync(fileStream);
blob.Properties.ContentType = mimeType;
await blob.SetPropertiesAsync();
return blob.Uri;
}
我遇到的问题是这是零星的,似乎没有定义哪种文件被接受以及哪些文件产生错误的模式。起初我认为它可能是一个大小问题,但事实并非如此,因为我有几个较大的文件成功上传,然后一个小文件将抛出错误。图像似乎工作正常,它在其他文件类型上被击中或错过,没有任何押韵或理由我可以弄明白。