每天解决一些c#小问题,在写微信小程序,或者一些手机软件接口,我们经常要用到上传图片到服务器,或者使用图床去保存我们的图片。
这次就简单明了的来梳理一下如何实现图片的接受和对接受到的图片进行一些处理。
一、实现图片的接收
1.首先要明确现在大部分前端的传输图片的统一规范都是通过POST请求+form表单提交文件的形式
话不多说上代码,这里是上传一张图片的示例,我用的是时间戳命名
[HttpPost,Route("UpLoadImageFiles")]
public string UpLoadImageFiles(string suffix)//suffix是后缀的意思,可以自己判断,也可以前端传输
{
var files = HttpContext.Current.Request.Files;//首先先确定请求里夹带的文件数量
if (files.AllKeys.Any())//如果存在文件
{
using (HttpClient client = new HttpClient())
{
HttpContextBase HttpContext = (HttpContextBase)Request.Properties["MS_HttpContext"];
var text = HttpContext.Request.Files[0].InputStream;//获取到文件流
string path = HttpContext.Request.MapPath("~/");//获取你的根目录
string datetime = GetTimeStamp();
string strPath = path + "File\\" + datetime + suffix;//这里要注意的是先要建立File文件夹,不然会报错,也可以自己写一个检测文件夹,这里就先不赘述
StreamHelp.StreamToFile(text,strPath);//需要用到下一步的帮助类将其保存为文件
//------------------以下是剪裁和压缩图片代码不需要的可以略过
string imgPath = path + "File\\img\\" + datetime + suffix;
ImageHelp img = new ImageHelp(strPath);
img.GetReducedImage(0.8, imgPath);
}
return "添加成功";
}
return "无文件";
}
///获取时间戳的方法
private string GetTimeStamp()
{
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalMilliseconds).ToString();
}
2.获取到文件流后,需要一个帮助类将其转化为文件保存起来,我把它封装了一下StreamHelp.cs
public s