question.Image 格式: “data:image/jpg;base64,编码,data:image/jpg;base64,编码,data:image/jpg;base64,编码,”
int index = question.Image.IndexOf("data:image/");
string[] sArray = Regex.Split(question.Image, "data:image/", RegexOptions.IgnoreCase);//1.分割出图片格式以及对应的base64图片编码for (int i = 0; i < sArray.Length; i++)
{
if (!string.IsNullOrEmpty(sArray[i]))
{
int indexCurrent = sArray[i].IndexOf(";base64,");
int headIndexCurrent = indexCurrent + 8; //2.截取base64开始位置
int currentStrLength = sArray[i].Length;//3.包含类型的base64总长度
int subStrEndLength = 0;
//4.去掉base64末尾,(逗号)
if (i == sArray.Length-1 )
{
subStrEndLength = currentStrLength- headIndexCurrent;
}
else
{
subStrEndLength = currentStrLength- headIndexCurrent-1;
}
var type = sArray[i].Substring(0, indexCurrent);//5.获取图片类型
var base64 = sArray[i].Substring(headIndexCurrent, subStrEndLength);//6.获取base64
byte[] bt = Convert.FromBase64String(base64);//7.将base64转换成字节数组
System.IO.MemoryStream stream = new System.IO.MemoryStream(bt);//转成文件流
var result = saveFiles(stream, type);
if (result.Status == 0)
{
ImageUrl += result.Msg+",";
}
else
{
return Json(result);
}
}
}
ResultDto 类
public class ResultDto
{
public ResultDto() {
this.Status = 0;
this.Msg = string.Empty;
this.Title = string.Empty;
}
/// <summary>
/// 状态
/// </summary>
public int Status { get; set; }
/// <summary>
/// 返回信息
/// </summary>
public string Msg { get; set; }
/// <summary>
/// 搜索内容
/// </summary>
public string Title { get; set; }
}
//saveFiles方法
Func<Stream, string, ResultDto> saveFiles = (s, type) =>
{
var result = new ResultDto();
Bitmap bitmap = new Bitmap(s);
//bitmap;
//System.IO.FileInfo file = new System.IO.FileInfo(filedata.LocalFileName);
type = type.Replace(".", string.Empty);
string basedir = "/UploadFile/" + DateTime.Now.ToString("yyyy-MM-dd") + "/";
string path = System.Web.HttpContext.Current.Server.MapPath(basedir);
var Uploadconfig = System.Configuration.ConfigurationManager.AppSettings["UploadFile"];
if (string.IsNullOrEmpty(Uploadconfig))
{
throw new Exception(" Need Setting UploadFile");
result.Status = -1;
result.Msg = "Need Setting UploadFile";
return result;
}
path = Uploadconfig + "/UploadFile/" + DateTime.Now.ToString("yyyy-MM-dd") + "/";
if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}
string fileName = "." + type;
if (fileName != ".jpg" &&
fileName != ".png" &&
fileName != ".bmp" &&
fileName != ".gif" &&
fileName != ".jpeg"
)
{
result.Status = -1;
result.Msg = "图片格式错误";
return result;
//throw new InvalidOperationException("图片格式错误");
}
if (bitmap.Size.Height * bitmap.Size.Width >= 1024 * 1024 * 3)
{
result.Status = -1;
result.Msg = "图片大小太大,请上传小图";
return result;
//return Json(resultDto, JsonRequestBehavior.AllowGet);
//throw new InvalidOperationException("图片大小太大,请上传小图!");
}
fileName = Guid.NewGuid().ToString("D") + fileName;
bitmap.Save(Path.Combine(path, fileName));
result.Msg = basedir + fileName;
result.Status = 0;
return result;
};