【问题标题】:How to code MVC Web Api Post method for file upload如何编写用于文件上传的 MVC Web Api Post 方法
【发布时间】:2013-10-06 18:34:59
【问题描述】:

我正在关注 this 关于从 android 将文件上传到服务器的教程,但我似乎无法在服务器端正确获取代码。有人可以帮我编写适用于该 android java 上传器的 Web Api post 方法吗?我当前的 web api 控制器类如下所示:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;

namespace WSISWebService.Controllers
{
    public class FilesController : ApiController
    {
        // GET api/files
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/files/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/files
        public string Post([FromBody]string value)
        {
            var task = this.Request.Content.ReadAsStreamAsync();
            task.Wait();
            Stream requestStream = task.Result;

            try
            {
                Stream fileStream = File.Create(HttpContext.Current.Server.MapPath("~/" + value));
                requestStream.CopyTo(fileStream);
                fileStream.Close();
                requestStream.Close();
            }
            catch (IOException)
            {
                //  throw new HttpResponseException("A generic error occured. Please try again later.", HttpStatusCode.InternalServerError);
            }

            HttpResponseMessage response = new HttpResponseMessage();
            response.StatusCode = HttpStatusCode.Created;
            return response.ToString();
        }          

        // PUT api/files/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/files/5
        public void Delete(int id)
        {
        }
    }
}

因为截止日期是星期二,所以我非常渴望让这项工作正常进行。如果有人可以提供帮助,将不胜感激。

【问题讨论】:

    标签: java android asp.net-mvc http-post httprequest


    【解决方案1】:

    您可以将文件发布为 multipart/form-data

        // POST api/files
        public async Task<HttpResponseMessage> Post()
        {
            // Check if the request contains multipart/form-data.
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }
    
            string root = HttpContext.Current.Server.MapPath("~/App_Data");
            var provider = new MultipartFormDataStreamProvider(root);
    
            string value;
    
            try
            {
                // Read the form data and return an async data.
                var result = await Request.Content.ReadAsMultipartAsync(provider);
    
                // This illustrates how to get the form data.
                foreach (var key in provider.FormData.AllKeys)
                {
                    foreach (var val in provider.FormData.GetValues(key))
                    {
                        // return multiple value from FormData
                        if (key == "value")
                            value = val;
                    }
                }                       
    
                if (result.FileData.Any())
                {                    
                    // This illustrates how to get the file names for uploaded files.
                    foreach (var file in result.FileData)
                    {
                        FileInfo fileInfo = new FileInfo(file.LocalFileName);
                        if (fileInfo.Exists)
                        {
                           //do somthing with file
                        }
                    }
                }
    
    
                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, value);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = files.Id }));
                return response;
            }
            catch (System.Exception e)
            {
                return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2020-05-19
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多