c# 用Base64实现文件上传

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,它是一种基于64个可打印字符来表示二进制数据的方法。

使用base64进行文件上传的具体流程是:前台使用js将文件转换为base64格式,后台通过高级编程语言,将base64格式的文件,转换为原文件。下面就来演示一下,C#语言配合js,如何实现图片的base64格式上传与解析保存。

    首先看一下前台是如何将文件读取到的,请先看如下js代码:

var DataforUp = "";
 var reader = new FileReader(); //声明文件读取对象
//声明文件读取完毕后调用的方法,通过this.result获取到转换的数据对象
 reader.onload = function () {
  DataforUp = this.result;
 };
//当用户选择文件后,进行转换数据的操作
 $("#file").change(function () {
  reader.readAsDataURL(this.files[0]);
 });

文件的读取,需要借助于FileReader这个对象,DataforUp用于保存base64源码。#file该id对应文件选择标签。

FileReader对象有个onload事件,当读取文件的时候(或者说调用readAsDataURL方法后),会触发此事件,base64转换的源码就存在于它的result属性中。

下面具体解释一下上述代码:

当用户选择文件后,使用FileReader对象读取文件,读取后自动转换为base64格式,然后触发该对象的onload方法,将转换后的base64源码保存下来。

这样我们就拿到了base64格式的文件源码,通过ajax,就可以将文件发送到后台。

    接下来看一下后台是如何解析并保存的:

public string SaveImgBaseSixFour(string img,string obj)
{
 if(img==null){
 return "数据为空";
 }
 string result = img;
 int index = -1;
 //判断是不是base64文件类型
 index = img.IndexOf("base64,");
 if (index != -1)
 {
  index += 7;
 //将数据转换为二进制字节数组
 var imgbit = Convert.FromBase64String(img.Substring(index));
 //生成文件名
 string imgname = DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";
 //保存图片
 using (Image image=Image.FromStream(new MemoryStream(imgbit)))
  {
   image.Save(_rootPath+imgname,ImageFormat.Jpeg);
  }
 }
}

base64源码的基本模型是 data:image/png;base64,...文件码...=

data标识文件类型,紧接着base64,开头的文件源码最后以=结束,所以解析的时候要去掉开头这一部分,本案例图片扩展名是写死的,也可以通过base64文件头去获取图片的扩展名,此处不再详细介绍。

    解析一下代码流程:

判断文件是否为空,然后获取到真正数据的开始索引,然后调用Convert.FromBase64String方法将base64转换为原文件,然后通过文件流将内存中保存的文件数据真实保存到本地​。具体使用方法,读者可自行查阅官方文档,此处不再赘述​。

以上就是c# 用Base64实现文件上传的详细内容,更多关于c# Base64文件上传的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#实现Base64处理的加密解密,编码解码示例

    本文实例讲述了C#实现Base64处理的加密解密,编码解码.分享给大家供大家参考,具体如下: using System; using System.Text; namespace Common { /// <summary> /// 实现Base64加密解密 /// 作者:周公 /// </summary> public sealed class Base64 { /// <summary> /// Base64加密 /// </summary> /// &

  • asp.C#实现图片文件与base64string编码解码

    图片当然是存在那个js文件里面,于是我就打开了flashblocker.js,然后浏览一下,找到下面一句: var flash = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAA......' (小白)<SPAN style="FONT-SIZE: small">这是我第一次认识到base64的用场,记得以前保存网页的时候,总习惯保存为.mht格式,因为这样会把网页中的图片也保存下来,但是一直奇怪为何

  • C# 文件上传下载(Excel导入,多线程下载)功能的实现代码

    废话不多说了,直接给大家贴代码,具体代码如下所示: //打开Excel文件,转换为DataTable DataTable dtExcel; private void OpenFile() { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Microsoft Excel files(*.xls)|*.xls;*.xlsx"; //筛选打开文件类型 :图片 *.jpg|*.jpg|*.bmp|*.bmp ;&q

  • c# 实现文件上传下载功能的实例代码

    NuGet 安装SqlSugar 1.Model文件下新建 DbContext 类 public class DbContext { public DbContext() { Db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = "server=localhost;uid=root;pwd=woshishui;database=test", DbType = DbType.MySql, InitKeyTy

  • c#和java base64不一致的解决方法

    本文主要介绍了关于c#和java base64不一致的解决方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 不一致的问题不是编码的问题  而是json字符串的问题通常我们会json 嵌套  我们先来看连个字符串 {"contentType":"","httpMethod":"POST","paramMap":"{\"keyword\":\"华为\&

  • C#解码base64编码二进制数据的方法

    本文实例讲述了C#解码base64编码二进制数据的方法.分享给大家供大家参考.具体如下: 通过在Convert类的静态方法Convert.FromBase64String,可以讲base64编码的字符串解码为等效的byte []数组. using System; static class MyModClass { public static byte[] Base64DecodeString(this string inputStr) { byte[] decodedByteArray = Co

  • C# 图片与Base64码的相互转化问题(代码详解)

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规范. Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息.采用Base64编码具有不可读性,需要解码后才能阅读. Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上"符号类"字符(+, /, =),不同的应用场景又分别研制了Base64

  • C#实现的文件上传下载工具类完整实例【上传文件自动命名】

    本文实例讲述了C#实现的文件上传下载工具类.分享给大家供大家参考,具体如下: 这里给出的工具类是在VS2013环境下采用C#语言实现文件上传.下载功能.上传时,为避免文件名在服务器中重复,采用"服务器时间+8位随机码+文件名+文件后缀"的方式作为服务器上的文件名:下载采用的是WebAPI的方式进行的,下载成功后可自定义文件的保存路径. 具体源码如下所示: using System; using System.IO; using System.Net; using System.Net.

  • C#实现Web文件上传的两种方法实例代码

    1. C#实现Web文件的上传 使用C#如何实现文件上传的功能呢?下面笔者简要介绍一下. 首先,在你的Visual C# web project 中增加一个上传用的Web Form,为了要上传文件,需要在ToolBox中选择HTML类的File Field控件,将此控件加入到Web Form中,然而此时该控件还不是服务端控件,我们需要为它加上如下一段代码:<input id=PreviousFile1 type=file size=49 runat="server">,这样

  • C#编写的Base64加密和解密类

    这个C#类是一个基于Base64的加密和解密类,用户可以可以使用默认的秘钥进行加密.解密,也可以自己设定秘钥进行加密和解密,非常实用 代码一:非常精简的代码 /// <summary> /// Base64加密,解密方法 /// </summary> /// <paramname="s">输入字符串</param> /// <paramname="c">true-加密,false-解密</param&

  • c# Base64编码和图片的互相转换代码

    事出有因 我们已经做了一个编辑器,这个编辑器可以以xml格式存储一些信息.在存储图片信息时我们碰到了一些问题.我们本来在xml信息中存储的是图片的路径,然而一旦客户把这个信息copy到其他电脑上而没有同时copy相关的图片时,就会出现一些问题.          后来,我们把图片数据转换为Base64编码,替代了原先存储图片路径的方式. 转换流程 将图片转化为Base64字符串的流程是:首先使用BinaryFormatter将图片文件序列化为二进制数据,然后使用Convert类的ToBase64

  • C#实现字符串与图片的Base64编码转换操作示例

    本文实例讲述了C#实现字符串与图片的Base64编码转换操作.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Drawing

随机推荐