[英]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.