欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c# 用Base64实现文件上传

程序员文章站 2022-03-22 15:38:46
base64是网络上最常见的用于传输8bit字节码的编码方式之一,它是一种基于64个可打印字符来表示二进制数据的方法。 使用base64进行文件上传的具体流程是:前台使用js将文件转换为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文件上传的资料请关注其它相关文章!