简体   繁体   English

ASP.NET Web API上传图片

[英]ASP.NET Web API upload image

How to upload an image using HttpWebRequest/WebRequest to server?如何使用 HttpWebRequest/WebRequest 将图像上传到服务器? Server side action looks like this:服务器端操作如下所示:

    [HttpPost]
    [Route("/uploadfile")]
    public async Task<string> UploadFile([FromForm(Name = "fileName")] IFormFile image)
    {
       MemoryStream stream = new MemoryStream();
       await image.CopyToAsync(stream);
       ...
    }

According to the method of HttpWebRequest and your description, you can refer to the following code implementation.根据HttpWebRequest的方法和你的描述,可以参考下面的代码实现。

Codes of Client in ASP.NET Core Console Application ASP.NET 核心控制台应用程序中的客户端代码

    static void Main(string[] args)
    {
        UploadFile("https://localhost:44391/uploadfile", "D:\\upload\\1.jpg", "image", "multipart/form-data;",new NameValueCollection { });
    }

    public static void UploadFile(string url, string file, string paramName, string contentType, NameValueCollection nvc)
    {
        string boundary = DateTime.Now.Ticks.ToString("x");
        byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
                 //create request object
        HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
        wr.ContentType = "multipart/form-data; boundary=" + boundary;
        wr.Method = "POST";
        wr.KeepAlive = true;
        wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
                 
        Stream rs = wr.GetRequestStream();
                 
        string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
        foreach (string key in nvc.Keys)
        {
            rs.Write(boundarybytes, 0, boundarybytes.Length);
            string formitem = string.Format(formdataTemplate, key, nvc[key]);
            byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
            rs.Write(formitembytes, 0, formitembytes.Length);
        }
        rs.Write(boundarybytes, 0, boundarybytes.Length);
                 
        string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
        string header = string.Format(headerTemplate, paramName, file, contentType);
        byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
        rs.Write(headerbytes, 0, headerbytes.Length);
                 
                 //upload
        FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
        byte[] buffer = new byte[4096];
        int bytesRead = 0;
        while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
        {
            rs.Write(buffer, 0, bytesRead);
        }
        fileStream.Close();
                 
        byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
        rs.Write(trailer, 0, trailer.Length);
        rs.Close();

        WebResponse wresp = null;
        try
        {
            wresp = wr.GetResponse();
            Stream stream2 = wresp.GetResponseStream();
            StreamReader reader2 = new StreamReader(stream2);
            Console.WriteLine(string.Format("File uploaded, server response is: {0}", reader2.ReadToEnd()));
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error uploading file", ex);
            if (wresp != null)
            {
                wresp.Close();
                wresp = null;
            }
        }
        finally
        {
            wr = null;
        }
    }

Controller codes of server Controller 服务器代码

    [HttpPost]
    [Route("/uploadfile")]
    public async Task<string> UploadFile([FromForm(Name ="image")] IFormFile image)
    {
        if (image == null) return "is null";
        Console.WriteLine(image.FileName);
        Console.WriteLine(image.Length);
        MemoryStream stream = new MemoryStream();
        await image.CopyToAsync(stream);
        return "true";
    }

Screenshots of test测试截图

在此处输入图像描述

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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