1.图片上传至控制器,本过程有:构建http请求,发送参数以及图片信息
代码为:
#region 存储图片
//开启http访问链接
using (HttpClient client = new HttpClient())
{
//设定要响应的数据格式
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/json"));
//定义内容
using (var content = new MultipartFormDataContent())
{
//基于字节数组提供http内容
List listPara = new List();
//请求头部
var dataContent = new ByteArrayContent(Encoding.UTF8.GetBytes(saveurl));
dataContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
Name = "ImgPath"
};
listPara.Add(dataContent);
//请求数据
List listData = new List();
Stream stream = file.InputStream;
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Seek(0, SeekOrigin.Begin);
//数据部分
ByteArrayContent fileContemt = new ByteArrayContent(bytes);
//定义文件名
fileContemt.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = fileNameNew
};
listData.Add(fileContemt);
//申明一个方法 将ByteArrayContent集合加入到MulipartFormDataContent中
Action> act = (dataContents) =>
{
foreach (var item in dataContents)
{
content.Add(item);
}
};
act(listPara);
act(listData);
//发送请求
var requestResult = client.PostAsync(GlobalData.ImgOperSite + "/api/ImgUpload/UploadImage", content).Result;
if (requestResult.StatusCode == System.Net.HttpStatusCode.OK)
{
//取得保存图片返回的状态结果
string resultStr = requestResult.Content.ReadAsStringAsync().Result;
ImageOperateResult ImageModel = JsonHelper.ToObj(resultStr);
if (ImageModel != null)
{
//成功
if (ImageModel.Success == true)
{
//路径为相对路径+文件名
imgModel.ImagePath = Tools.GetReadImg(saveurl) + fileNameNew;
imgModel.UpdateTime = DateTime.Now;
imgModel.DisplayStartTime = imgModel.DisplayStartTime == DateTime.MinValue ? DateTime.Now : imgModel.DisplayStartTime;
imgModel.DisplayEndTime = imgModel.DisplayEndTime == DateTime.MinValue ? DateTime.MaxValue : imgModel.DisplayEndTime;
}
//失败
else
{
return Json(new { type = Info.error, msg = ImageModel.Msg }, JsonRequestBehavior.AllowGet);
}
}
else
{
return Json(new { type = Info.warning, msg = "没有获取服务器返回的数据" }, JsonRequestBehavior.AllowGet);
}
}
else
{
return Json(new { type = Info.warning, msg = "发送请求失败" }, JsonRequestBehavior.AllowGet);
}
}
}
#endregion
2.利用webapi进行图片接收并处理
[RoutePrefix("api/ImgUpload")]
public class ImgUploadController : ApiController
{
[HttpPost, Route("UploadImage")]
public async Task UploadImage()
{
if (!Request.Content.IsMimeMultipartContent())
{
LibraryLogger.Instance.WriteLog(LibraryLogger.libLogLevel.Error, "上传图片失败:不支持的媒体类型(Unsupported media type)!");
return new ImageOperateResult { Success = false, Error = "", Msg = "不支持的媒体类型(Unsupported media type)!" };
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");//指定要将文件存入的服务器物理位置
if (!Directory.Exists(root))
{
Directory.CreateDirectory(root);
}
var provider = new MultipartFormDataStreamProvider(root);
string ImgPath="";
try
{
await Request.Content.ReadAsMultipartAsync(provider);
ImgPath = Convert.ToString(provider.FormData["ImgPath"]);
if(ImgPath==null)
LibraryLogger.Instance.WriteLog(LibraryLogger.libLogLevel.Info, "上传图片ImgPath参数为空");
else
LibraryLogger.Instance.WriteLog(LibraryLogger.libLogLevel.Info, string.Format("上传图片ImgPath参数:{0}", ImgPath));
if (!Directory.Exists(fullfilepath))
{
Directory.CreateDirectory(fullfilepath);
}
bool fileFaild = false;
string msgException = "";
List listFile = new List();
foreach (var file in provider.FileData)
{
string orfilename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');
LibraryLogger.Instance.WriteLog(LibraryLogger.libLogLevel.Info, string.Format("orfilename:{0}", orfilename));
FileInfo fileinfo = new FileInfo(file.LocalFileName);
LibraryLogger.Instance.WriteLog(LibraryLogger.libLogLevel.Info, string.Format("上传图片:{0}", file.LocalFileName));
if (fileinfo.Length <= 0)
{
fileFaild = true;
msgException = "上传的图片为空!";
}
else
{
int idxDot = orfilename.LastIndexOf('.');
if (idxDot > 0)
{
fileinfo.CopyTo(Path.Combine(fullfilepath, orfilename), true);
}
}
fileinfo.Delete();//删除原文件
if (fileFaild) break;
}
if (fileFaild)
{
LibraryLogger.Instance.WriteLog(LibraryLogger.libLogLevel.Error, string.Format("上传图片失败:{0}", msgException));
return new ImageOperateResult { Success = false, Error = "", Msg = msgException }; ;
}
return new ImageOperateResult { Success = true, Error = "", Msg = "上传图片成功!" };
}
catch (Exception ex)
{
LibraryLogger.Instance.WriteLog(LibraryLogger.libLogLevel.Error, string.Format("上传图片异常:{0}", ex.Message));
return new ImageOperateResult { Success = false, Error = ex.ToString(), Msg = "上传图片异常!" };
}
}
}