base64字符串转文件,以及ngImgCrop裁剪图片并上传保存到服务器示例
2017-04-19 11:42
776 查看
base64字符串是包含文件格式的文件字符串,例如:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAgAElEQVR4Xsy9+……
根据base64字符串可以转化成真实的文件。思路是,首先将base64字符串读取城字节数组;然后将字节数组读入到字节流(内存流);其次将base64字符串开头部分包含的文件格式提取出来,得到文件类型并转换成相应后缀名;最后,根据字节流和文件类型,即可转化成相应的文件,并保存到物理磁盘。
特别是最近玩AngularJS时候,用到图片上传,裁剪图片保存功能,需要用到ngImgCrop裁剪图片控件。它就是将图片裁剪后保存成base64字符串结果的。
示例:base64编码的文本转为图片
/// <summary>
/// base64编码的文本转为图片
/// </summary>
/// <param name="base64"></param>
/// <returns></returns>
private static Image Base64StringToImage(string base64)
{
byte[] bytes = Convert.FromBase64String(base64);
using (MemoryStream ms = new MemoryStream(bytes))
{
Bitmap bmp = new Bitmap(ms);
return bmp;
}
}
示例:获取base64字符串开头部分包含的文件格式
var m = new Regex(@"(?<=data\:)[\w\/_\.]+(?=\;)", RegexOptions.IgnoreCase).Match(byteStr);
string ContentType = null != m ? m.Value : "image/png";
示例:获取文件大小
/// <summary>
/// 获取文件/文件夹大小(字节)
/// </summary>
/// <param name="filePath">路径</param>
/// <returns></returns>
private static long FileSize(string filePath)
{
long temp = 0;
//路径是否是文件
if (File.Exists(filePath) == false)
{
//文件目录
string[] entries = Directory.GetFileSystemEntries(filePath);
foreach (string item in entries)
{
//遍历文件目录内的所有子文件目录,子文件
temp += FileSize(item);
}
}
else
{
FileInfo fileInfo = new FileInfo(filePath);
return fileInfo.Length; //获取真实文件的大小(字节)
}
return temp;
}
全部代码:
根据base64字符串可以转化成真实的文件。思路是,首先将base64字符串读取城字节数组;然后将字节数组读入到字节流(内存流);其次将base64字符串开头部分包含的文件格式提取出来,得到文件类型并转换成相应后缀名;最后,根据字节流和文件类型,即可转化成相应的文件,并保存到物理磁盘。
特别是最近玩AngularJS时候,用到图片上传,裁剪图片保存功能,需要用到ngImgCrop裁剪图片控件。它就是将图片裁剪后保存成base64字符串结果的。
示例:base64编码的文本转为图片
/// <summary>
/// base64编码的文本转为图片
/// </summary>
/// <param name="base64"></param>
/// <returns></returns>
private static Image Base64StringToImage(string base64)
{
byte[] bytes = Convert.FromBase64String(base64);
using (MemoryStream ms = new MemoryStream(bytes))
{
Bitmap bmp = new Bitmap(ms);
return bmp;
}
}
示例:获取base64字符串开头部分包含的文件格式
var m = new Regex(@"(?<=data\:)[\w\/_\.]+(?=\;)", RegexOptions.IgnoreCase).Match(byteStr);
string ContentType = null != m ? m.Value : "image/png";
示例:获取文件大小
/// <summary>
/// 获取文件/文件夹大小(字节)
/// </summary>
/// <param name="filePath">路径</param>
/// <returns></returns>
private static long FileSize(string filePath)
{
long temp = 0;
//路径是否是文件
if (File.Exists(filePath) == false)
{
//文件目录
string[] entries = Directory.GetFileSystemEntries(filePath);
foreach (string item in entries)
{
//遍历文件目录内的所有子文件目录,子文件
temp += FileSize(item);
}
}
else
{
FileInfo fileInfo = new FileInfo(filePath);
return fileInfo.Length; //获取真实文件的大小(字节)
}
return temp;
}
全部代码:
public class FileUploadResultModel { public Guid FileID { get; set; } public long FileSize { get; set; } } public static class Base64FileHandle { /// <summary> /// base64编码的文本转为图片 /// </summary> /// <param name="base64"></param> /// <returns></returns> private static Image Base64StringToImage(string base64) { byte[] bytes = Convert.FromBase64String(base64); using (MemoryStream ms = new MemoryStream(bytes)) { Bitmap bmp = new Bitmap(ms); return bmp; } } /// <summary> /// 获取文件/文件夹大小(字节) /// </summary> /// <param name="filePath">路径</param> /// <returns></returns> private static long FileSize(string filePath) { long temp = 0; if (File.Exists(filePath) == false) { string[] entries = Directory.GetFileSystemEntries(filePath); foreach (string item in entries) { temp += FileSize(item); } } else { FileInfo fileInfo = new FileInfo(filePath); return fileInfo.Length; } return temp; } private static string SuffixName(string ContentType) { switch (ContentType.Trim().ToLower()) { case "image/jpg": case "image/jpeg": return ".jpg"; case "image/gif": return ".gif"; case "image/bmp": return ".bmp"; case "image/png": return ".png"; default: return ""; } } /// <summary> /// 创建圈子 /// </summary> /// <param name="community"></param> /// <returns></returns> public static ResponseModel<FileUploadResultModel> ngImgCropHandle(string base64) { var response = new ResponseModel<FileUploadResultModel>() { IsLogin = true }; string byteStr = base64.Trim();//data:image/png;base64, int delLength = byteStr.IndexOf(',') + 1; string str = byteStr.Substring(delLength, byteStr.Length - delLength); Image returnImage = Base64StringToImage(str); var m = new Regex(@"(?<=data\:)[\w\/_\.]+(?=\;)", RegexOptions.IgnoreCase).Match(byteStr); string ContentType = null != m ? m.Value : "image/png"; Guid filename = Guid.NewGuid(); string filepath = @"D:\wwwroot\" + filename + SuffixName(ContentType); returnImage.Save(filepath); response.Data = new FileUploadResultModel() { FileID = filename, FileSize = FileSize(filepath) }; response.Success = true; response.Message = "ok"; return response; } }
相关文章推荐
- MVC4实现图片上传,裁剪和保存到服务器
- 百度UEditor图片文件改变默认保存到项目根路径,自定义上传路径或远程服务器
- 图片转成BASE64字符串,然后以JSON的方式传递。当图片大小在1M左右的时候没问题,可以上传。但是当文件大小>1.5M的是否发现图片转BASE64不成功,居然得到的值是NULL
- php向服务器上传文件以及图片预览
- web开发中上传图片保存base64 好还是保存文件
- HTML5 MUI 手机预览图片,裁剪上传base64,保存数据库
- Java Springboot结合FastDFS实现文件上传以及根据图片url将图片上传至图片服务器
- 图片文件,图片文件流和BASE64加密字符串之间的转换,以及图片的BASE64加密字符串再jsp上如何显示
- base64转为图片文件上传到服务器
- 以Base64字符串形式上传文件——在web浏览器端使用原生Javascript及Ajax读取本地文件并发送请求到服务器
- Android将程序崩溃信息保存本地文件以及上传到服务器
- 上传图片到服务器,服务器保存并且接收到了,但是必须刷新文件夹或者重新部署文件才能在客户端显示图片
- HTML5 MUI 手机预览图片,裁剪上传base64,保存数据库
- JQuery文件上传及以Base64字符串形式呈现图片
- Nodejs把接收图片base64格式保存为文件存储到服务器上
- 把base64格式图片上传到服务器后保存起来
- 百度ueditor富文本--图片保存路径的配置以及上传到远程服务器
- [置顶] JAVA上传文件图片到服务器保存
- 选择本地图片上传到服务器进行头像设置以及文件下载
- C# FileUpload上传视频、图片、文档,分别保存在不同的文件夹中以及下载文件的方法