1.下载包HttpMultipartParser
2.服务端代码
public bool Upload(Stream stream) { var parser = MultipartFormDataParser.Parse(stream);//解析stream var file = parser.Files.First();//获取文件 string filename = file.FileName;//文件名 var parameters = parser.Parameters;//获取参数 Stream data = file.Data; string savePath = Path.Combine(Environment.CurrentDirectory, "Downloads"); if (!Directory.Exists(savePath)) { Directory.CreateDirectory(savePath); } using (FileStream fs = new FileStream(Path.Combine(savePath, filename), FileMode.Create, FileAccess.ReadWrite, FileShare.None)) { byte[] buffer = new byte[4096]; int count = 0; while ((count = data.Read(buffer,0,buffer.Length))>0) { fs.Write(buffer, 0, count); } fs.Close(); data.Close(); } return true; }
3.测试可用postman等接口测试工具(我这里用的apifox,一样的)
4.在winform中使用
第一种用HttpClient 类上传一个MultipartFormDataContent对象,但是上传的文件名称如果有中文,服务端解析文件名称不正确。
第二种为注释里面的方法(需要安装RestSharp包,我使用的是106版本,使用未发现什么问题)
private async void btn_open_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog.ShowDialog() == DialogResult.OK) { HttpClient http = new HttpClient(); FileStream file = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); // 创建一个 MultipartFormDataContent 对象 using (MultipartFormDataContent content = new MultipartFormDataContent()) { var filename = Path.GetFileName(openFileDialog.FileName); // 将 DataStream 属性作为文件流添加到内容中 content.Add(new StreamContent(file), "file", openFileDialog.FileName); // 检查响应状态码 try { // 发送 POST 请求并传递类的实例 HttpResponseMessage response = await http.PostAsync("http://127.0.0.1:8080/post", content); if (response.IsSuccessStatusCode) MessageBox.Show("POST 请求成功!"); //var client = new RestClient("http://127.0.0.1:8080/post"); //client.Timeout = -1; //var request = new RestRequest(Method.POST); //request.AddHeader("Accept", "*/*"); //request.AddHeader("Host", "127.0.0.1:8080"); //request.AddHeader("Connection", "keep-alive"); //request.AddHeader("Content-Type", "multipart/form-data; boundary=--------------------------519848749455474480392777"); //request.AddFile("file", openFileDialog.FileName); //request.AddParameter("www", "卢本伟牛逼"); //IRestResponse response = client.Execute(request); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }
标签:stream,request,FileName,openFileDialog,file,wcf,var,new,restful From: https://www.cnblogs.com/zhaosanmao/p/17839192.html