简体   繁体   中英

Trying to get file response from ASP.NET Web API

I have migrated some methods from a MVC controller to a Web API controller and now I have this method:

[HttpPost]
[Route("api/Request/UploadImage")]        
public IHttpActionResult UploadImage()
{
    try
    {
        if (!Request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }    

        var httpRequest = System.Web.HttpContext.Current.Request;

        if (_inMemoryStore == null)
        {
            _inMemoryStore = new List<FileLocalStore>();
        }

        if (httpRequest.Files.Count > 0)
        {
            var postedFile = httpRequest.Files[0];
            var uniqueFileName = Guid.NewGuid().ToString();
            var fileStream = new MemoryStream();

            postedFile.InputStream.CopyTo(fileStream);
            _inMemoryStore.Add(new FileLocalStore() { Id = uniqueFileName, File = fileStream });

            var fileStore = new ServiceRequestAttachmentViewModel
                    {
                        FileName = httpRequest.Form["FileName"].ToString(),
                        FileMIME = httpRequest.Form["FileMIME"].ToString(),
                        UniqueFileName = uniqueFileName,
                        Thumbnail = fileStream.GetBuffer().GetThumbnailImage(80, 80),
                        IsPrivate = Convert.ToBoolean(httpRequest.Form["IsPrivate"].ToString()),
                        IsAdded = true,
                        IsDeleted = false
                    };    

            var content = JsonConvert.SerializeObject(fileStore);

            // return Ok(fileStore);                        
            return Content(HttpStatusCode.OK,fileStore);                                                                    
        }
        else
        {
            return Ok(new { Data = "" });

            //return Request.CreateResponse(HttpStatusCode.Created, new
            //{ Data = "" });
        }
    }
    catch (Exception ex)
    {
        Log.Error($"Error uploading image {ex.Message} {ex.InnerException} {ex.StackTrace}");
        return BadRequest(ex.Message);
        //var response2 = Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message);
        //return response2;
    }
}

In the original MVC controller, it was easy to return the ContentResult after fileStore was serialized. I want to do the same thing here but I'm having issues. It keeps saying it exceeds the maximum bytes but the file was only 10k big.

Is there something else I need to set? the media type received is a multipart/form-data type. The thumbnail property is the issue as it has bytes of data.

This is being called using fileupload() method of jQuery.

You probably.net to update the maxRequestLength & maxAllowedContentLength in web.config

From MSDN , the maximum default size is 4MB

Here's the setting for 1GB

<system.web>
    <httpRuntime maxRequestLength="2097152" requestLengthDiskThreshold="2097152" executionTimeout="240"/>
</system.web>
<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="2147483648" />
        </requestFiltering>
    </security>
</system.webServer>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM