ASP.NET Core RC-1文件上传

时间:2016-06-03 03:44:40

标签: asp.net asp.net-web-api kendo-ui asp.net-core azure-storage-blobs

我目前正使用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;
    }

我遇到的问题是这是零星的,似乎没有定义哪种文件被接受以及哪些文件产生错误的模式。起初我认为它可能是一个大小问题,但事实并非如此,因为我有几个较大的文件成功上传,然后一个小文件将抛出错误。图像似乎工作正常,它在其他文件类型上被击中或错过,没有任何押韵或理由我可以弄明白。

0 个答案:

没有答案