C# 使用FileUpload控件上传图片,将文件转换成二进制进行存储与读取
状况描述:
需要上传文件,但是不想要保存到实体路径下,便可以用该功能来实现。
效果图:
点击【Upload】按钮,上传文件到数据库;
点击【Preview】,预览文件;
具体实现:
前台:
<tr>
<td class="subject" nowrap="nowrap" align="right" style="width: 180px; text-align: right;"><%=Resources.WebResource.OE_ID_TYPE%>
<!--ID Type-->
:
</td>
<td style="color: #F90;">
<asp:DropDownList ID="drpIDType_N" runat="server" style="width: 25%;" OnSelectedIndexChanged="drpIDType_N_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>
<span style="color: Red;">*</span>
<asp:FileUpload ID="btnFile" runat="server" Style="width: 25%;" /> <input type="button" id="btnUpload" runat="server" value='<%$ Resources:WebResource,CC_UPLOAD%>' onserverclick="btnUpload_Click" Visible="true" style="height:inherit; text-align: center;color: #b44c00;font-weight: 700;background-color: #ffe926;" />
<a href="Javascript: void(0)" id="lnkShowImg" runat="server" title="<%$ Resources:WebResource,IMG_PREVIEW_TITLE%>" visible="false" style="width:15%"><%=Resources.WebResource.IMG_PREVIEW%></a>
</td>
</tr>
<tr>
<td class="subject" nowrap="nowrap" align="right" style="width: 180px; text-align: right;"><%=Resources.WebResource.OE_ID_NO%>
<!--ID No-->
:
</td>
<td class="name">
<input type="text" runat="server" id="txtIDNO_N" maxlength="" style="width: 96.6%;" />
<span style="color: Red">*</span>
</td>
</tr>
后台:
protected void btnUpload_Click(object sender, EventArgs e)
{
try
{
UploadImg(this.btnFile, this.txtEmployeeID, this.txtDEPID);
}
catch (Exception ex)
{
ShowError("W99999", "J00006", o_PopupWin, this.mLanguage);
WriteLog(ex.ToString());
WriteLog("Browser:" + HttpContext.Current.Request.Browser.Browser);
}
} private void UploadImg(FileUpload file, string s_EmployeeID, string s_DEPID)
{
//验证文件类型
Boolean fileOK = false;
String fileExtension;
if (file.HasFile) //判断是否有图片上来了
{
fileExtension = System.IO.Path.GetExtension(file.FileName.Trim()).ToLower();//获取文件扩展名
String[] allowedExtensions = { ".jpg", ".png", ".jpeg" }; //允许上传的文件格式
for (int i = ; i < allowedExtensions.Length; i++)
{
if (fileExtension == allowedExtensions[i])
{
fileOK = true;
break;
}
}
}
else
{
Response.Write("<script>alert('进行提示');</script>");
return;
}
if (!fileOK)
{
Response.Write("<script>alert('进行提示');</script>");
return;
} #region 因浏览器兼容问题,会取不到文件完整路径,所以先将文件保存到本地
string strFileLocalPath = Server.MapPath("../../Upload//Tmp//");
string strFileName = strFileLocalPath + DateTime.Now.ToString("yyyyMMddHHmmss") + fileExtension;
if (Directory.Exists(strFileLocalPath) == false)
{
Directory.CreateDirectory(strFileLocalPath);
}
if (file.PostedFile.FileName.Trim() != "")
{
file.PostedFile.SaveAs(strFileName);
WriteLog("Browser:" + HttpContext.Current.Request.Browser.Browser);
}
#endregion //将文件读进二进制内存
byte[] photo = Utility.getImg(strFileName, true); //插入数据库
o_CC_Insured_BLL.insertOrUpdateCCImg(fileExtension, System.IO.Path.GetFileName(file.PostedFile.FileName), photo); //给【Preview】赋JS事件
setShowImgLink(s_EmployeeID, s_DEPID); //提示上传成功
ShowOk("W00058", "J00005", o_PopupWin, this.mLanguage);
} /// <summary>
/// 从数据库里面查询已上传的文件
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
private void setShowImgLink(string s_EmployeeID, string s_DEPID)
{
DataTable dtimg = new DataTable(); dtimg = o_CC_Insured_BLL.getUploadFileCC(s_EmployeeID, s_DEPID);
if (dtimg.Rows.Count > )
{
lnkShowImg.Attributes.Add("onclick", "funOpenShowImage('" + s_EmployeeID + "','" + s_DEPID + "');");
lnkShowImg.Visible = true;
}
else
{
lnkShowImg.Visible = false;
}
} /// <summary>
/// 将图片文件写入二进制对象
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static byte[] getImg(string filePath, bool deleteFlg)
{
//读取图片
FileStream fs = new System.IO.FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] photo;
try
{
photo = br.ReadBytes((int)fs.Length);
}
finally
{
br.Close();
fs.Close();
}
//删除文件
if (deleteFlg)
{
//删除图片文件
if (File.Exists(filePath))
{
File.Delete(filePath);
}
}
return photo;
}
JS:
function funOpenShowImage(s_EmployeeID, s_DEPID) {
var strUrl = "../showUploadImg.aspx";
if (document.all)//IE浏览器
{
var strParm = s_EmployeeID + "," + s_DEPID
openNewWin_IE(strUrl, strParm, , , "newwin");
}
else if ((/Trident\/\./).test(navigator.userAgent))//IE11浏览器
{
var strParm = s_EmployeeID + "," + s_DEPID
openNewWin_IE11(strUrl, strParm, , , "newwin");
}
else//其他浏览器
{
var aryParm = [["EmployeeID", s_EmployeeID], ["DEPID", s_DEPID]];
OpenNewWin(strUrl, aryParm, , , "newwin");
}
}
预览需要新建一个页面:
新建showUploadImg.aspx
前台:
添加Img控件
<div>
<img runat="server" id="imgShow" src="\Upload\TMP\aaa.jpg" />
</div>
后台:
protected void Page_Load(object sender, EventArgs e)
{
try
{
clearTmp(Server.MapPath("../Upload/TMP/"));
//setInsured();
//saveImg(); string _EmployeeID = string.Empty;
string _DepID = string.Empty;
string strParm = this.Request.Form.Get("param") == null ? "" : Server.HtmlDecode(this.Request.Form.Get("param"));
if (string.IsNullOrEmpty(strParm))
{
_EmployeeID = this.Request.Form.Get("EmployeeID") == null ? "" : Server.HtmlDecode(this.Request.Form.Get("EmployeeID"));
_DepID = this.Request.Form.Get("DEPID") == null ? "" : Server.HtmlDecode(this.Request.Form.Get("DEPID"));
}
else
{
string[] arrParm = strParm.Split(',');
_EmployeeID = arrParm[] == null ? "" : arrParm[];
_DepID = arrParm[] == null ? "" : arrParm[];
} //从数据库读取文件
DataTable dtImg = new DataTable();
dtImg = o_CC_Insured_Bll.getUploadFileCC(_EmployeeID, _DepID); string strFileName = _EmployeeID + DateTime.Now.ToString("yyyyMMddhhmmss") + ".JPG";
string strPhotoPath = "../Upload/TMP/";
string strFullPhotoPath = Server.MapPath(strPhotoPath) + strFileName;
if (dtImg.Rows.Count > && dtImg.Rows[]["ImgFile"] != DBNull.Value)
{
if (Directory.Exists(Server.MapPath(strPhotoPath)) == false)
{
Directory.CreateDirectory(Server.MapPath(strPhotoPath));
}
string setImgResult = setImg((byte[])dtImg.Rows[]["ImgFile"], strFullPhotoPath);
if (string.IsNullOrEmpty(setImgResult))
{
imgShow.Src = strPhotoPath + strFileName;
}
}
}
catch
{
ShowError("W99999", "J00006", o_PopupWin, this.mLanguage);
}
} /// <summary>
/// 清空文件夹下的内容
/// </summary>
/// <param name="folderPath"></param>
public static void clearTmp(string folderPath)
{
//判斷是否有這樣的路徑
if (System.IO.Directory.Exists(folderPath) == true)
{
DirectoryInfo theFolder = new DirectoryInfo(folderPath);
FileInfo[] fileInfo = theFolder.GetFiles();
foreach (FileInfo NextFile in fileInfo) //遍历文件
{
try
{
File.Delete(NextFile.FullName);
}
catch { }
}
}
}
/// <summary>
/// 读取图片文件到指定目录
/// </summary>
/// <param name="img"></param>
/// <param name="filePath"></param>
/// <returns></returns>
public static string setImg(byte[] img, string filePath)
{
try
{
BinaryWriter bw = new BinaryWriter(File.Open(filePath, FileMode.OpenOrCreate));
bw.Write(img);
bw.Close();
return "";
}
catch (Exception ex)
{
return ex.ToString();
}
}
JS开启新窗口的共用方法:
//目的:提供開啟視窗的畫面
//參數:strUrl-->欲開啟畫面的網址,strParms-->參數,width-->畫面的寬度,height-->畫面的高度
// WinName-->開啟的視窗名稱
// xx. YYYY/MM/DD VER AUTHOR COMMENTS
// 1. 2016/08/22 1.00 Anne Create
function OpenNewWin(strUrl,aryParms,width,height,WinName)
{
var top=;
var left=;
if (height =='' && width==''){
width=screen.availWidth;
height=screen.availHeight;
}else if (height >screen.availHeight && width>screen.availWidth){
width=screen.availWidth;
height=screen.availHeight;
}else{
top=(screen.availHeight-height)/;
left=(screen.availWidth-width)/;
}
var newWindow = window.open("",WinName,'width='+width+'px,height='+height+'px,dependent,left='+left+',top='+top+',status=no,toolbar=false,menubar=no,scrollbars=yes,resizable=yes',true);
if (!newWindow) return false; var html ="";
//參數的處理
//var aryParm=strParms.split("&");//有多少個參數
var i=;
for(i=;i<aryParms.length;i++)
{
//var aryParaTemp = aryParm[i].split("=");//每一個參數
var aryParaTemp = aryParms[i];
html += "<input type='hidden' name='" + aryParaTemp[] + "' value='" + aryParaTemp[] + "'/>";//參數字段
}
html = "<html><head></head><body><form id='formid' method='post' action='"+strUrl+"'>"+html;
html += "</form><scr"+"ipt type='text/javascript'>document.getElementById('formid').submit()</scr"+"ipt></body></html>";
//html += "</form><script type='text/javascript'>document.getElementById('formid').submit()</script></body></html>";
newWindow.document.write(html);//提交post數據
} //目的:提供開啟視窗的畫面(跨域跳转的话,用OpenNewWin方法,IE浏览器不兼容,故重写一个)
//參數:strUrl-->欲開啟畫面的網址,strParms-->參數,width-->畫面的寬度,height-->畫面的高度
// WinName-->開啟的視窗名稱
function openNewWin_IE(strUrl,strParam,width,height,name)
{
var tempForm = document.createElement("form");
tempForm.id="tempForm1";
tempForm.method="post";
tempForm.action=strUrl;
tempForm.target=name;
var hideInput = document.createElement("input");
hideInput.type="hidden";
hideInput.name= "param"
hideInput.value= strParam;
tempForm.appendChild(hideInput);
tempForm.attachEvent("onsubmit",function(){funWinOpen("",width,height,name);});
document.body.appendChild(tempForm);
tempForm.fireEvent("onsubmit");
tempForm.submit();
document.body.removeChild(tempForm);
}
function openNewWin_IE11(strUrl,strParam,width,height,name)
{
var tempForm = document.createElement("form");
tempForm.id="tempForm1";
tempForm.method="post";
tempForm.action=strUrl;
tempForm.target=name;
var hideInput = document.createElement("input");
hideInput.type="hidden";
hideInput.name= "param"
hideInput.value= strParam;
tempForm.appendChild(hideInput);
tempForm.addEventListener("onsubmit",function(){funWinOpen("",width,height,name);});
document.body.appendChild(tempForm);
tempForm.submit();
document.body.removeChild(tempForm);
}
function funWinOpen(strUrl,width,height,WinName)
{
var top=;
var left=;
if (height =='' && width==''){
width=screen.availWidth;
height=screen.availHeight;
}else if (height >screen.availHeight && width>screen.availWidth){
width=screen.availWidth;
height=screen.availHeight;
}else{
top=(screen.availHeight-height)/;
left=(screen.availWidth-width)/;
}
var newWindow = window.open(strUrl,WinName,'width='+width+'px,height='+height+'px,dependent,left='+left+',top='+top+',status=no,toolbar=false,menubar=no,scrollbars=yes,resizable=yes',true);
}
预览效果图:
C# 使用FileUpload控件上传图片,将文件转换成二进制进行存储与读取的更多相关文章
- php将文件转换成二进制输出[转]
header( "Content-type: image/jpeg"); $PSize = filesize('1.jpg'); $picturedata = fread(fope ...
- java实现文件转换成二进制存储与取出
一.功能描述: 将文件转成二进制数据放入数据库中,需要的时候,便可以取出安装与使用. 二.数据库: 建立一个数据库字段存放转成二进制的图片,这个字段有一个要求就是要设置成blob类型的 CREATE ...
- 033. asp.netWeb用户控件之二将页面转换成web控件和使用Web控件显示热点新闻
访问Web用户控件的属性 ASP.NET提供的各种服务器控件都有其自身的属性和方法,程序开发人员可以灵活地使用服务器控件中的属性和方法开发程序.在用户控件中,程序开发人员也可以自行定义各种属性和方法, ...
- asp.net使用FileUpload控件上传图片且重命名
我在根目录下创建了一个Images图片存放文件夹,上传的图片都在这 下面贴代码 if (FileUpload1.HasFile) { string filename = FileUpload1.Fil ...
- asp.net FileUpload 控件上传文件 以二进制的形式存入数据库并将图片显示出来
图片上传事件代码如下所示: byte[] binary = upload.FileBytes; StringBuilder sqlStrSb = new StringBuilder(); sqlStr ...
- Winform控件输入的字母转换成大写
private void textBoxHbh_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar >= 'a' & ...
- net9:图片文件转换成二进制流存入SQL数据库,以及从数据库中读取二进制流输出文件
原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- webform FileUpload控件实例应用 上传图片
首先在根目录下建一个"images"文件: HTML: <form id="form1" runat="server"> < ...
- .NET中的FileUpload控件的使用-原生JS(二)
本篇使用原生JS进行数据传输,使用FileUpload控件上传文件,适配IE. HTML <div class="container"> <div class=& ...
随机推荐
- Jquery的入门学习
jQuery API中文文档地址 http://www.jquery123.com/ Jquery w3school教程 http://www.w3school.com.cn/jquery/index ...
- ★浅谈Spanking情节
- 转:【Java集合源码剖析】LinkedHashmap源码剖析
转载请注明出处:http://blog.csdn.net/ns_code/article/details/37867985 前言:有网友建议分析下LinkedHashMap的源码,于是花了一晚上时 ...
- 【java】关于java类和对象,你想知道的在这里!
java类的基本组成 java作为一门面向对象的语言, 类和对象是最重要的概念之一,下面,就让我们来看看java中类的基本结构是怎样的: 一个简单的java类主要可由以下几个部分(要素)组成: 1.实 ...
- # 团队作业8——第二次项目冲刺(Beta阶段)--5.27 seventh day
团队作业8--第二次项目冲刺(Beta阶段)--5.27 seventh day Day six: 会议照片 项目进展 Beta冲刺的最后一天,以下是今天具体任务安排: 队员 昨天已完成的任务 今日计 ...
- 24点游戏详细截图介绍以及原型、Alpha、Beta对比
原型设计 图片展示 功能与界面设计 1.登录注册 2.手机号验证 3.24点游戏 4.粉色系女生界面 Alpha 图片展示 功能与界面设计 1.24点游戏 2.背景音乐 3.可查看多种可能的答案 4. ...
- 201521123080《Java程序设计》第3周学习总结
1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面作 ...
- evak购物车-课程设计(201521123034陈凯欣)
1.团队课程设计博客链接 https://i.cnblogs.com/EditPosts.aspx?postid=7047127 2.个人负责模块或任务说明 1.Java 编写商品类Goods,商品属 ...
- 201521123011《Java程序设计》 第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
- Redis总结(六)Redis配置文件全解
前面已经写了一些关于redis 的介绍,redis 的基本功能和用法,基本上都说了,有问题的可以去看看 http://www.cnblogs.com/zhangweizhong/category/77 ...