c# 用Base64实现文件上传

作者:Charles_Su 时间:2023-12-20 00:52:11 

    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转换为原文件,然后通过文件流将内存中保存的文件数据真实保存到本地。具体使用方法,读者可自行查阅官方文档,此处不再赘述。

来源:https://www.cnblogs.com/charlesmvp/p/13338689.html

标签:c#,base64,文件上传
0
投稿

猜你喜欢

  • Android垃圾回收机制解决内存泄露问题

    2021-08-29 09:20:55
  • MyBatis-Plus拦截器实现数据权限控制的示例

    2022-12-10 05:10:17
  • SpringBoot项目jar和war打包部署方式详解

    2023-05-10 14:58:29
  • ibatis学习之搭建Java项目

    2021-11-02 00:35:29
  • Java 程序员掌握 Spring Boot非常有必要

    2021-06-27 19:06:52
  • 解析JAVA深度克隆与浅度克隆的区别详解

    2023-11-02 10:57:28
  • Android Activity 横竖屏切换的生命周期

    2021-08-12 23:48:23
  • C#异步编程由浅入深(一)

    2023-12-16 07:32:29
  • java多线程下载实例详解

    2023-05-19 05:53:37
  • Java聊天室之实现获取Socket功能

    2023-09-19 03:57:10
  • 解决spring cloud服务启动之后回到命令行会自动挂掉问题

    2022-09-29 13:16:29
  • Android使用WebView实现全屏切换播放网页视频功能

    2021-10-19 18:21:16
  • 详解Java实现批量压缩图片裁剪压缩多种尺寸缩略图一键批量上传图片

    2022-12-07 15:56:04
  • spring中向一个单例bean中注入非单例bean的方法详解

    2022-07-19 13:14:18
  • Java.try catch finally 的执行顺序说明

    2022-07-06 00:30:25
  • Android Studio连接SQLite数据库的登录注册实现

    2023-08-14 11:27:49
  • 关于@Entity和@Table注解的用法详解

    2022-05-15 15:29:04
  • Java实现循环体的过滤器的方法

    2023-11-22 09:35:33
  • 实现Android 滑动退出Activity的功能

    2023-04-24 03:00:34
  • Eclipse下编写java程序突然不会自动生成R.java文件和包的解决办法

    2023-11-19 00:24:05
  • asp之家 软件编程 m.aspxhome.com