文章目录

  • C#操作base64文件
    • 1.引入命名空间
  • 总结
  • ContentType查看地址

C#操作base64文件

1.引入命名空间

using System;
using System.IO;

代码如下(直接复制就能用):

/// <summary>/// base64帮助类/// </summary>public class Base64Helper{public Base64Helper() { }/// <summary>/// 实例化/// </summary>/// <param name="Extension">文件扩展 例如.jpg</param>/// <param name="Base64">base64字符串</param>/// <param name="ContentType">需要浏览器直接打开base64时指定</param>public Base64Helper(string Extension, string Base64, string ContentType = null){//先对扩展名赋值,因为假如扩展名不存在时在对Base64赋值会检索扩展名this.Extension = Extension;this.ContentType = ContentType;this.Base64 = Base64;}#region 私有参数/// <summary>/// 文件流/// </summary>private MemoryStream _stream { get; set; }/// <summary>/// 检索前100个字符,假如有,则去掉,前面部分/// </summary>private const int len = 100;/// <summary>/// base64字符串/// </summary>protected string _Base64 { get; set; }#endregion#region 公共属性/// <summary>/// 扩展文件名/// </summary>public string Extension { get; set; }/// <summary>/// 原始字符串/// </summary>public string OldBase64 { get; private set; }/// <summary>/// base64字符串/// </summary>/// <remarks>如果Base64没有包含扩展名时,必须要设置Extension之后才能正常使用</remarks>public string Base64{get{return _Base64;}set{string file = value;OldBase64 = file;if (string.IsNullOrEmpty(file)){_Base64 = null;Extension = null;return;}int count = file.IndexOf(',', 0, len);if (count >= 0){string strExtension = file.Remove(file.IndexOf(';'));if (string.IsNullOrEmpty(Extension)){Extension = "." + strExtension.Substring(strExtension.IndexOf('/') + 1);}if (string.IsNullOrEmpty(ContentType)){int Start = strExtension.IndexOf(':');ContentType = strExtension.Substring(Start + 1);}file = file.Substring(count + 1);}_Base64 = file;}}/// <summary>/// 如果要使用HtmlBase64请指定ContentType/// 部分是支持浏览器直接查看,部分是下载/// </summary>/// <remarks>例如:application/pdf;image/jpeg;等</remarks>public string ContentType { get; set; }/// <summary>/// 支持浏览器打开的base64/// </summary>/// <remarks>只有在实例化时指定了ContentType才能用</remarks>public string HtmlBase64 { get{if (string.IsNullOrEmpty(ContentType)){throw new Exception("未指定ContentType");}return string.Format("data:{0};base64,{1}", ContentType, Base64);}}/// <summary>/// 文件大小/// </summary>public long Length { get { return stream.Length; } }/// <summary>/// 文件流/// </summary>public MemoryStream stream{get{if (IsNull){throw new Exception("base64字符串或扩展名为空");}if (_stream == null){string base64 = Base64.Replace(' ', '+');_stream = new MemoryStream(Convert.FromBase64String(base64));}return _stream;}}/// <summary>/// base64字符串、扩展名是否为空/// </summary>public bool IsNull{get{return (string.IsNullOrEmpty(Base64) || string.IsNullOrEmpty(Extension));}}#endregion/// <summary>/// 文件转base64/// </summary>/// <param name="FilePath">文件路径</param>/// <param name="ContentType">需要浏览器直接打开base64时指定</param>/// <returns>Base64FileHelper</returns>public static Base64Helper FileToBase64(string FilePath, string ContentType = null){using (FileStream filestream = new FileStream(FilePath, FileMode.Open)){byte[] bt = new byte[filestream.Length];//调用read读取方法filestream.Read(bt, 0, bt.Length);var base64Str = Convert.ToBase64String(bt);string Extension = Path.GetExtension(FilePath);return new Base64Helper(Extension, base64Str, ContentType);}}/// <summary>/// 将base64保存为文件并返回新的文件名(带后缀)/// </summary>/// <param name="path">文件保存路径</param>/// <param name="FileName">文件名,不带后缀</param>/// <param name="NewFileName">新文件名,带后缀</param>/// <param name="len">文件最大长度,0不限制</param>public string Save(string path,string FileName, int maxLen = 0){if (maxLen != 0 && Length > maxLen){throw new Exception("文件大小不能超过" + (maxLen / 1024) + "kb");}//检查目录,没有就创建if (!Directory.Exists(path)){Directory.CreateDirectory(path);}//检查路径是否需要\if (!path.EndsWith("\\")){path += "\\";}//检查是否存在同名文件,存在就+(1)while (File.Exists(path + FileName + Extension)){FileName = FileName + "(1)";}//组成新的文件名string NewFileName = FileName + Extension;//写文件FileStream fs = new FileStream(path + FileName + Extension, FileMode.Create, FileAccess.Write);byte[] bytes = stream.ToArray();fs.Write(bytes, 0, bytes.Length);fs.Close();return NewFileName;}}

总结

经本人测试可用 注意使用IsNull检索base64是否为空,否则可能出现异常


ContentType查看地址

https://www.runoob.com/http/http-content-type.html


C#操作base64文件相关推荐

  1. C#在客户端和服务端操作Excel文件

    一.在客户端把数据导入到Excel文件步骤 1.创建Excel application对象,打开或生成Excel文件 //服务端创建StringBuilder对象     System.Text.St ...

  2. C++ 学习笔记之——文件操作和文件流

    1. 文件的概念 对于用户来说,常用到的文件有两大类:程序文件和数据文件.而根据文件中数据的组织方式,则可以将文件分为 ASCII 文件和二进制文件. ASCII 文件,又称字符文件或者文本文件,它的 ...

  3. python中csv文件操作_python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  4. 解决修改properties 属性文件存在缓存问题,附带操作properties文件工具类

    2019独角兽企业重金招聘Python工程师标准>>> 在做项目的时候有些数据不一定需要在数据库管理,例如数据库连接,定时任务等等的配置..有时候需要动态修改这些数据,但在修改完后, ...

  5. arx对正在操作的文件进行保存

    //对正在操作的文件进行保存 STDMETHODIMP CTHDatabase::Save(void) {// TODO: 在此添加实现代码 Acad::ErrorStatus es ;try{AcD ...

  6. Python操作Zip文件

    Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt.

  7. python中io.textio_Python文件读写概述(IO操作、文件读写、stringiobytesio、序列化),python,的,小,总结,StringIOBytesIO...

    IO操作 在进行文件的读写之前,需要说明几点.首先,运行的程序和读取的数据都会在内存中缓存. 进入到 程序或数据 内存 其次,用python程序进行文件的读写,需要创建一个小工具–文件流,用来处理数据 ...

  8. python手机版怎么用-手机使用python操作图片文件(pydroid3)过程详解

    起因 前几天去国图拍了一本书,一本心理学方面的书,也许你问我为什么不去买一本,或者去网上找pdf. 其实吧,关于心理学方面的书可以说在市面上一抓就是一堆,至于拍这本书两个原因,一个是没有什么收藏价值不 ...

  9. python关闭读写的所有的文件-Python文件操作:文件的打开关闭读取写入

    Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...

  10. python中文名字-完美解决Python2操作中文名文件乱码的问题

    Python2默认是不支持中文的,一般我们在程序的开头加上#-*-coding:utf-8-*-来解决这个问题,但是在我用open()方法打开文件时,中文名字却显示成了乱码. 我先给大家说说Pytho ...

最新文章

  1. 在MATPLOTLIB中加入汉字显示
  2. Braess’paradox 布雷斯悖论
  3. python集合的运算、不使用有的运算符_无序的集合:Python中的数学集合运算
  4. SAP Fiori里的manifest.json
  5. py获取前端的参数_微前端 qiankun 项目实践
  6. 自动采集壁纸的微信小程序
  7. 微信公布朋友圈9月十大谣言 包括新型手机病毒出现等
  8. RabbitMQ学习笔记:安装环境
  9. Unity调用Android类方法
  10. python打包成exe去cmd_完美起航-python打包exe之打包深度学习模型踩坑记录及其解决办法。...
  11. flashpaper实现百度文库、豆丁网文档预览功能 - 坑
  12. 菜鸟学做Django--图书管理系统
  13. (学习笔记)图像处理——Retinex增强
  14. 怎么快速找到:附近的人
  15. (vopt-7063) Failed to find ‘glbl‘ in hierarchical name 问题解决
  16. 软工中级实训——实训总结报告
  17. oracle wallet使用与维护
  18. dom对象jquery对象
  19. Android日志打印Util类
  20. Blender着色器:使用手绘遮罩进行材质叠加

热门文章

  1. 微信小程序UI组件 开发框架 实用库 经典demo
  2. 个人微信公众号做外卖优惠券怎么弄?
  3. RPGMakerMV的插件学习
  4. 金蝶移动bos开发教程_移动BOS开发 -- 移动表单
  5. Struts的增删改查
  6. 一个不错的Redis实战学习视频教程
  7. java计算机毕业设计O2O生鲜果蔬电商设计与实现(附源码、数据库)
  8. 一篇适合小白的Shiro教程
  9. 更改Word文档中自带插入公式中的字体解决方案
  10. 【信息系统项目管理师】项目管理十大知识领域速记