目录
- 前言
- 文件上传的核心实现
- 一、效果展示
- 二、服务端代码
- 三、客户端代码
- 方式一
- 方式二
- 总结
前言
Web应用开发中,文件上传是一个常见且重要的功能。它不仅涉及到前端用户界面的设计,还涉及到后端服务器如何高效、安全地处理上传的数据。
本文将详细介绍一种基于ASP.NET Web API的服务端解决方案以及两种不同的客户端实现方法,帮助开发者更好地理解和实现文件上传功能。
文件上传的核心实现
一、效果展示
通过以下截图可以直观地看到整个文件上传过程的效果:
Postman测试
服务端接收
上传成功
二、服务端代码
服务端采用ASP.NET Web API来处理文件上传请求,以下是核心代码片段:
using System; using System.IO; using System.Web; using System.Web.Http; namespace Mes.Controllers { public class FileController : ApiController { [HttpPost] public string UploadFile() { string result = string.Empty; try { // 核心部分 文件 string fileName = HttpContext.Current.Request.Files[0].FileName; Stream stream = HttpContext.Current.Request.Files[0].InputStream; // 参数 var forms = HttpContext.Current.Request.Form; foreach (var item in forms) 编程客栈 { string val = forms[item.ToString()]; } // 保存路径 string uploadFolder = "F:\\图片"; string savePath = System.IO.Path.Combine(uploadFolder, fileName); FileStream fsWrite = new FileStream(savePath, FileMode.Create); byte[] bytes = new byte[1024 * 4]; int total = 0; int size = 0; do { // 注意第二个参数是在buffer中的偏移量,不是在文件中的偏移量 size = stream.Read(bytes, 0, bytes.Length); fsWrite.Write(bytes, 0, size); total += size; } while (size > 0); fsWrite.Close(); result = "true"; } catch (Exception ex) { result = ex.Message; } return result; } } }
三、客户端代码
客户端提供了两种方式来上传文件,分别是通过表单(multipart/form-data)的方式一和方式二。
方式一
public string PostFile(string url, Dictionary<string, object> dics, string filePath) { // 返回结果 string result = string.Empty; try { MultipartFormDataContent form = new MultipartFormDataContent(); using (HttpClient client = new HttpClient()) { MediaTypeWithQualityHeaderValue temp = new MediaTypeWithQualityHeaderValue("application/json") { CharSet = "utf-8" }; client.DefaultRequestHeaders.Accept.Add(temp);//设定要响应的数据格式 // 参数 foreach (var keyValuePair in dics) { form.Add(new StringContent(keyValuePair.Value.ToString()), keyValuePair.Key); } // 读取文件 Stream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); var fileName = Path.GetFileName(filePath); // 设定文件类型表单项,使用StreamContent存放文件流 form.Add(new StreamContent(fileStream), "f编程ile", fileName); Task<HttpResponseMessage> task = client.PostAsync(url, form); task.Wait(); // 等待异步操作完成 HttpResponseMessage response = task.Result; response.EnsureSuccessStatusCode(); // 确保响应状态码表示成功 string responseBody = task.Result.Content.ReadAsStringAsync().Result; Console.WriteLine(responseBody); result = responseBody; } return result; } catch (Exception ex) { throw new Exception(ex.Message); } }
方式二
public string PostFile(string url, Dictionary<string, object> dics, string filePath) { // 返回结果 string result = string.Empty; try { MultipartFormDataContent form =android new phpMultipartFormDataContent(); using (HttpClient client = new HttpClient()) { MediaTypeWithQualityHeaderValue temp = new MediaTypeWithQualityHeaderValue("application/json") { CharSet = "utf-8" }; client.DefaultRequestHeaders.Accept.Add(temp);//设定要响应的数据格式 // 参数 foreach (var keyValuePair in dics) { form.Add(new StringContent(keyValuePair.Value.ToString()), keyValuePair.Key); } // 读取文件 读取为字节数据存入 using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { byte[] data = new byte[fileStream.Length]; fileStream.Read(data, 0, data.Length); fileStream.Close(); var fileName = Path.GetFileName(filePath); form.Add(new ByteArrayContent(data), "file", fileName); } Task<HttpResponseMessage> task = client.PostAsync(url, form); task.pythonWait(); // 等待异步操作完成 HttpResponseMessage response = task.Result; response.EnsureSuccessStatusCode(); // 确保响应状态码表示成功 string responseBody = task.Result.Content.ReadAsStringAsync().Result; Console.WriteLine(responseBody); result = responseBody; } return result; } catch (Exception ex) { throw new Exception(ex.Message); } }
总结
本文详细介绍了如何利用ASP.NET Web API实现文件上传功能,并提供了两种不同风格的客户端实现方法。通过这种方式,不仅可以有效提高项目的可维护性和灵活性,还能确保文件上传的安全性与效率。
以上就是C#实现文件上传和接收功能的详细内容,更多关于C#文件上传和接收的资料请关注编程客栈(www.devze.com)其它相关文章!
精彩评论