ASP.net WebAPI 上传图片实例(保存显示随机文件名)
[HttpPost]
public Task<Hashtable> ImgUpload()
{
// 检查是否是 multipart/form-data
if (!Request.Content.IsMimeMultipartContent("form-data"))
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
//文件保存目录路径
string SaveTempPath = $"~/Files/Image/{DateTime.Now.Year}/{DateTime.Now.Month}";
String dirTempPath = HttpContext.Current.Server.MapPath(SaveTempPath);
if (!Directory.Exists(dirTempPath))
{
Directory.CreateDirectory(dirTempPath);
}
// 设置上传目录
var provider = new MultipartFormDataStreamProvider(dirTempPath);
//var queryp = Request.GetQueryNameValuePairs();//获得查询字符串的键值集合
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<Hashtable>(o =>
{
Hashtable hash = new Hashtable();
hash["error"] = 1;
hash["errmsg"] = "上传出错";
var file = provider.FileData[0];//provider.FormData
string orfilename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');
FileInfo fileinfo = new FileInfo(file.LocalFileName);
//最大文件大小
int maxSize = 10000000;
if (fileinfo.Length <= 0)
{
hash["error"] = 1;
hash["errmsg"] = "请选择上传文件。";
}
else if (fileinfo.Length > maxSize)
{
hash["error"] = 1;
hash["errmsg"] = "上传文件大小超过限制。";
}
else
{
string fileExt = orfilename.Substring(orfilename.LastIndexOf('.'));
//定义允许上传的文件扩展名
string fileTypes = "gif,jpg,jpeg,png,bmp";
if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(fileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1)
{
hash["error"] = 1;
hash["errmsg"] = "上传文件扩展名是不允许的扩展名。";
}
else
{
String ymd = DateTime.Now.ToString("yyyyMMdd", System.Globalization.DateTimeFormatInfo.InvariantInfo);
String newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", System.Globalization.DateTimeFormatInfo.InvariantInfo);
fileinfo.CopyTo(Path.Combine(dirTempPath, newFileName + fileExt), true);
fileinfo.Delete();
hash["error"] = 0;
hash["errmsg"] = "上传成功";
}
}
return hash;
});
return task;
}
调用方法:
var client = new RestClient("http://localhost:56727/api/UploadFiles/ImgUpload");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
client.UserAgent = "Apifox/1.0.0 (https://apifox.com)";
request.AddFile("Files", "<Files>");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
加入文件地址就可以操作
https://www.jb51.net/article/44490.htm
winform上传图片方法
private async void btnUpload_Click(object sender, EventArgs e)
{
using (HttpClient client = new HttpClient())
{
// 设置WebAPI的URL
string apiUrl = "http://example.com/api/uploadfile";
// 选择要上传的文件
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog.FileName;
// 读取文件内容
byte[] fileContent = File.ReadAllBytes(filePath);
// 创建MultipartFormDataContent对象
MultipartFormDataContent content = new MultipartFormDataContent();
ByteArrayContent fileContentData = new ByteArrayContent(fileContent);
content.Add(fileContentData, "file", Path.GetFileName(filePath));
// 发送HTTP请求
HttpResponseMessage response = await client.PostAsync(apiUrl, content);
if (response.IsSuccessStatusCode)
{
MessageBox.Show("文件上传成功!");
}
else
{
MessageBox.Show("文件上传失败");
}
}
}
}
在上面的代码中,我们使用HttpClient类来发送一个POST请求,将文件内容作为MultipartFormDataContent发送到WebAPI的指定URL。如果上传成功,将会显示一个成功的消息框,否则会显示一个失败的消息框。
请确保在调用WebAPI之前,对WebAPI的URL进行正确的配置,并确保文件选择对话框选择的文件是存在的。