C#实现文件上传和接收功能
目录
- 前言
- 文件上传的核心实现
- 一、效果展示
- 二、服务端代码
- 三、客户端代码
- 方式一
- 方式二
- 总结
前言
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)其它相关文章!
加载中,请稍侯......
精彩评论