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=& ...
随机推荐
- 迁移学习-Transfer Learning
迁移学习两种类型: ConvNet as fixed feature extractor:利用在大数据集(如ImageNet)上预训练过的ConvNet(如AlexNet,VGGNet),移除最后几层 ...
- .NET及.NET Core系统架构
三层及多层架构 Multitier Architecture ASP.NET N-Tier Architecture Schema Visual Studio N-Tier Example 来源:ht ...
- Java并发之线程
在前面我们介绍的一些内容中,我们的程序都是一条执行流,一步一步的执行.但其实这种程序对我们计算机的资源的使用上是低效的.例如:我们有一个用于计算的程序,主程序计算数据,在计算的过程中每得到一个结果就需 ...
- Python中os和shutil模块实用方法集锦
Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...
- 【Beta阶段】第七次scrum meeting
Coding/OSChina 地址 1. 会议内容 学号 主要负责的方向 昨日任务 昨日任务完成进度 接下去要做 99 PM 配合100完成联网功能 100% 设置个人中心的设计 100 DEV 开始 ...
- 使用properties配置文件为javabean注入属性值
①:实体类 package com.hts.entity; import java.io.Serializable; public class A implements Serializable{ p ...
- 201521123063 《Java程序设计》第三周学习总结
1.本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2.书面作业 ...
- 201521123034 《Java程序设计》第9周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前 ...
- 201521123059 《Java程序设计》第十四周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 1.关系型数据库 --建立表格时表中一列中的数据类型必须一致.关系表中的行必须是唯一的,列是不可分的,某些行的某 ...
- 201521123048 《java程序设计》 第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1. ...