1.前端html代码

<input style="width:100%" onchange="loadpicture(1)" type="file" name="file" id="file➩1">

<img id="pic➩1" style="width:100%;height:120px" src="/Resource/Document/NetworkDisk/ProjectActivity/590600b4-f330-43c2-96fb-ea221f9e0ce2.jpg">

<input hidden="true" id="picsrc➩1" class="txt">

<input hidden="true" id="PictureUrl➩1" class="txt">

2.js代码,使用FileReader读取文件

 function loadpicture(i) {
var obj = document.getElementById("file➩" + i);
var file = obj.files[0];
//alert(file);
//创建读取文件的对象
var reader = new FileReader(); //创建文件读取相关的变量
var imgFile; //为文件读取成功设置事件
reader.onload = function (e) {
//alert('文件读取完成');
imgFile = e.target.result;
//console.log(imgFile);
$("#pic➩" + i).attr('src', imgFile);
$("#picsrc➩" + i).val(imgFile);
}; //正式读取文件
reader.readAsDataURL(file); }

3.ajax传后台,此处有封装,用GetTableDataJson的方式获取了每一个file的ID

实际传输的话只需要传

 $("#picsrc➩" + i).val()的值
//保存事件
function AcceptClick() {
if (!CheckDataValid('#form1')) {
return false;
} var ActivityForm = GetTableDataJson("#ActivityForm");
var ProblemForm = GetTableDataJson("#ProblemForm");
Loading(true, "正在提交数据...");
window.setTimeout(function () {
var postData = GetWebControls("#form1"); postData["ActivityForm"] = ActivityForm;
postData["ProblemForm"] = ProblemForm;
postData["BuildFormJson"] = JSON.stringify(GetWebControls("#CustomAttribute"));
AjaxJson("/ProjectManageModule/project/SubmitActivityForm?KeyValue=" + GetQuery('KeyValue'), postData, function (data) {
tipDialog(data.Message, 3, data.Code);
top.frames[tabiframeId()].windowload();
closeDialog();
});
}, 200);
}

4.后台c#代码,有可能会报GDI一般性错误的报错,

我这里是一开始目录没有对,所以报错,

realPath可以用
this.Server.MapPath(VirtualPath)的方式获取
由于我这边的文件存储目录和应用目录不在同一个盘符,所以使用了直接路径的写法
#region 图片处理,采用base64的方式转码解码
string virtualPath = "";
//图片上传
if (!string.IsNullOrEmpty(entityD.picsrc))
{
//删除老的图片
string FilePath = this.Server.MapPath(entityD.PictureUrl);
if (System.IO.File.Exists(FilePath))
System.IO.File.Delete(FilePath); string fileGuid = CommonHelper.GetGuid;
//long filesize = Filedata.ContentLength;
string FileEextension = ".jpg";
string uploadDate = DateTime.Now.ToString("yyyyMMdd");
//string UserId = ManageProvider.Provider.Current().UserId;
virtualPath = string.Format("~/Resource/Document/NetworkDisk/{0}/{1}{2}", "ProjectActivity", fileGuid, FileEextension); string realPath = string.Format(@"D:\LeaRun\Resource\Document\NetworkDisk\{0}\{1}{2}", "ProjectActivity", fileGuid, FileEextension); //string fullFileName = this.Server.MapPath(virtualPath);
////创建文件夹,保存文件
//realPath = Path.GetDirectoryName(fullFileName);
//先处理图片文件
string temp = entityD.picsrc.Substring();
byte[] arr2 = Convert.FromBase64String(entityD.picsrc.Substring());
using (MemoryStream ms2 = new MemoryStream(arr2))
{
System.Drawing.Bitmap bmp2 = new System.Drawing.Bitmap(ms2);
bmp2.Save(realPath, System.Drawing.Imaging.ImageFormat.Jpeg);
bmp2.Dispose();
ms2.Close();
}
entityD.PictureUrl = virtualPath;
}
#endregion

使用base64转码的方式上传图片的更多相关文章

  1. 前端以BASE64码的形式上传图片

    前端以BASE64码的形式上传图片 一直有一个很苦恼的问题困扰着铁柱兄,每次上传图片的时候前端要写一大堆js,然后后台也要写一堆java代码做处理.于是就在想,有没有简单又方便的方法把图片上传.今天算 ...

  2. 直接用<img> 的src属性显示base64转码后的字符串成图片

    直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="base64转码后的字符串" ></img> 下面的图片 ...

  3. javascript 使用btoa和atob来进行Base64转码和解码

    javascript原生的api本来就支持,Base64,但是由于之前的javascript局限性,导致Base64基本中看不中用.当前html5标准正式化之际,Base64将有较大的转型空间,对于H ...

  4. Base64的编码转换方式

    下面,详细介绍Base64的编码转换方式. 所谓Base64,就是说选出64个字符----小写字母a-z.大写字母A-Z.数字0-9.符号"+"."/"(再加上 ...

  5. Eclipse Class Decompiler影响class默认打开方式,重新设置Eclipse默认源码打开方式

    安装Eclipse Class Decompiler插件后,Eclipse中的默认源码打开方式被修改为Eclipse Class Decompiler 这不是我喜欢的,因为我希望,源码从网络中获取,当 ...

  6. 控件真的很好用,突然感觉自己以前研究Discuz!NT366源码的方式很2了

    控件真的很好用,突然感觉自己以前研究Discuz!NT366源码的方式很2了,就是按钮上的或其他控件上的图片哪里去了?

  7. JS图片上传后base64转码

    代码: // 获取文件流 var fileObj = document.getElementById('inputId').files; // 实例化一个FileReader对象 var reader ...

  8. Python Base64转码解码

    Python Base64 提供了好几种方法例如: encode, decode, encodestring, decodestring, b64encode, b64decode, standard ...

  9. javascript Base64转码解码

    javascript 使用btoa和atob来进行Base64转码和解码 $scope.checkAddCookie = function() { var expireDate = new Date( ...

随机推荐

  1. vs2013和vs2010的配置

    win10下vs2013和vs2010的相关配置 ------made by siwuxie095 主要是推荐一些vs2013和vs2010的好用的插件和配色方案,下面主要是以vs2013示例 1.首 ...

  2. 合并区间 · Merge Intervals & 插入区间 · Insert Interval

    [抄题]: 给出若干闭合区间,合并所有重叠的部分. 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10] ...

  3. centos7下编译安装php-7.0.15(PHP-FPM)

    centos7下编译安装php-7.0.15(PHP-FPM) 一.下载php7源码包 http://php.net/downloads.php 如:php-7.0.15.tar.gz 二.安装所需依 ...

  4. phpcms如何给已有的模块添加新功能?

    phpcms如何给已有的模块添加新功能? 方法一:直接在模块里的控制器文件中添加功能. 不建议使用此方法,因为一旦phpcms升级,有可能会覆盖模块中的文件, 导致你添加的功能丢失. 方法二:新建一个 ...

  5. dddddddddddddddddd

    PacificA: Replication in log-based distributed storage systemshttp://research.microsoft.com:8082/pub ...

  6. cannot convert from 'wchar_t *' to 'char *' 问题

    MFC中使用unicode 会导致cstring之间的转换变的很复杂 经常遇到这样的错误cannot convert from 'wchar_t *' to 'char *' 强制转换成wchar_t ...

  7. PAT 1074 宇宙无敌加法器(20)(代码+思路+测试点分析)

    1074 宇宙无敌加法器(20 分)提问 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为"P ...

  8. Reactor 模型(一)基本并发编程模型

    Reactor 模型(一)基本并发编程模型 Netty 系列目录 (https://www.cnblogs.com/binarylei/p/10117436.html) 在讲解 Reactor 线程模 ...

  9. 7.11 cookie 失效后 ,重新登陆 页面 可能跳出 框架 ,只剩主题 部分 ,

    判断地址 不在  框架里  (项目  地址栏一般 都是 首页地址 ) function url(){ var page=getpage(); if(window==top&&(page ...

  10. Silverlight或WPF动态绑定图片路径问题,不用Converter完美解决

    关于Silverlight或WPF动态绑定图片路径问题,不用Converter完美解决, 可想,一个固定的字符串MS都能找到,按常理动态绑定也应该没问题的,只需在前面标记它是一个Path类型的值它就能 ...