文件(图片生产缩略图)的上传与下载

简介:

一、文件(图片)保存到数据库
// 得到用户要上传的文件名
             string  strFilePathName  =  loFile.PostedFile.FileName;
            
string  strFileName  =  Path.GetFileName(strFilePathName);
            
int  FileLength  =  loFile.PostedFile.ContentLength;
            
if (FileLength <= 0 )
                
return ;
            
try
            
{//上传文件
                Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组
                Stream StreamObject = loFile.PostedFile.InputStream; //建立数据流对像
                
//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
                StreamObject.Read(FileByteArray,0,FileLength); 
                
//建立SQL Server链接
                string strCon = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
                SqlConnection Con 
= new SqlConnection(strCon);
                String SqlCmd 
= "INSERT INTO ImageStore (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@Image, @ContentType, @ImageDescription, @ImageSize)";
                SqlCommand CmdObj 
= new SqlCommand(SqlCmd, Con);
                CmdObj.Parameters.Add(
"@Image",SqlDbType.Binary, FileLength).Value = FileByteArray;
                CmdObj.Parameters.Add(
"@ContentType", SqlDbType.VarChar,50).Value = loFile.PostedFile.ContentType; //记录文件类型
                
//把其它单表数据记录上传
                CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar,200).Value = tbDescription.Text;
                
//记录文件长度,读取时使用
                CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt,8).Value = FileLength;
                Con.Open();
                CmdObj.ExecuteNonQuery(); 
                Con.Close();
                
//跳转页面
                Response.Redirect("ShowAll.aspx");
            }

            
catch
            
{
            }

取出来显示:
int  ImgID  =  Convert.ToInt32(Request.QueryString[ " ID " ]);  // ID为图片ID 
            
// 建立数据库链接
             string  strCon  =  System.Configuration.ConfigurationSettings.AppSettings[ " DSN " ];
            SqlConnection Con 
=   new  SqlConnection(strCon);
            String SqlCmd 
=   " SELECT * FROM ImageStore WHERE ImageID = @ImageID " ;
            SqlCommand CmdObj 
=   new  SqlCommand(SqlCmd, Con);
            CmdObj.Parameters.Add(
" @ImageID " , SqlDbType.Int).Value  =  ImgID;
            Con.Open();
            SqlDataReader SqlReader 
=  CmdObj.ExecuteReader();
            SqlReader.Read(); 
            Response.ContentType 
=  ( string )SqlReader[ " ImageContentType " ]; // 设定输出文件类型
            
// 输出图象文件二进制数制
            Response.OutputStream.Write(( byte [])SqlReader[ " ImageData " ],  0 , ( int )SqlReader[ " ImageSize " ]); 
            Response.End();
            
// 也可以保存为图像
//             FileStream fs = new FileStream(@"C:\aa.BMP", FileMode.OpenOrCreate, FileAccess.Write);
//             fs.Write((byte[])SqlReader["ImageData"], 0,(int)SqlReader["ImageSize"]);
//             fs.Close();

            Con.Close();

二、文件(图片)保存到硬盘   
方法一   /// <summary>
 2        /// 下载文件
 3        /// </summary>
 4        /// <param name="filename">文件物理地址</param>

 5          protected   void  DownloadFile( string  filename)
 6          {
 7
 8            string saveFileName = "test.xls";
 9            int intStart = filename.LastIndexOf("\\")+1;
10            saveFileName = filename.Substring(intStart,filename.Length-intStart);
11
12            System.IO.FileInfo fi=new System.IO.FileInfo(filename);
13            string fileextname=fi.Extension;
14            string DEFAULT_CONTENT_TYPE = "application/unknown";
15            RegistryKey regkey,fileextkey;
16            string filecontenttype;
17            try 
18            {                
19                regkey=Registry.ClassesRoot;                
20                fileextkey=regkey.OpenSubKey(fileextname);                
21                filecontenttype=fileextkey.GetValue("Content Type",DEFAULT_CONTENT_TYPE).ToString();
22            }

23            catch
24            {
25                filecontenttype=DEFAULT_CONTENT_TYPE;
26            }
      
27
28
29            Response.Clear();
30            Response.Charset = "utf-8";
31            Response.Buffer= true;
32            this.EnableViewState = false;
33            Response.ContentEncoding = System.Text.Encoding.UTF8;
34
35            Response.AppendHeader("Content-Disposition","attachment;filename=" + saveFileName); 
36            Response.ContentType=filecontenttype;
37
38            Response.WriteFile(filename); 
39            Response.Flush();
40            Response.Close();
41
42            Response.End();
43        }

44      
方法二
  /// <summary>
 2        /// 下载文件
 3        /// </summary>
 4        /// <param name="filename">文件物理地址</param>

 5        protected void DownloadFile(string filename)
 6        {
 7            string saveFileName = "test.xls";
 8            int intStart = filename.LastIndexOf("\\")+1;
 9            saveFileName = filename.Substring(intStart,filename.Length-intStart);
10
11            Response.Clear();
12            Response.Charset = "utf-8";
13            Response.Buffer= true;
14            this.EnableViewState = false;
15            Response.ContentEncoding = System.Text.Encoding.UTF8;
16
17            Response.AppendHeader("Content-Disposition","attachment;filename=" + saveFileName); 
18            Response.WriteFile(filename); 
19            Response.Flush();
20            Response.Close();
21
22            Response.End();
23        }文件的ContentType类型 小全
出现提示框

string  strFile = " F:\\a.doc " ; // 路径根据实际情况而定
if ( ! System.IO.File.Exists(strFile))
   
{
    Response.Write(
"<script language='javascript'>alert('对不起,文件不存在!');</script>");
    
return;
   }

   Response.Clear();
   Response.ClearHeaders();
   Response.Charset 
=   " GB2312 " ;
   Response.ContentEncoding 
= System.Text.Encoding.UTF8;
   Response.ContentType 
=   " application/octet-stream "
   FileInfo fi
= new  FileInfo(strFile);
   Response.AddHeader(
" Content-Disposition " , " attachment;  filename= "    +   HttpUtility.UrlEncode(fi.Name)) ;
   Response.AddHeader(
" Content-Length " ,fi.Length.ToString());
   
byte [] tmpbyte = new   byte [ 1024 * 8 ];
   FileStream fs
= fi.OpenRead();
   
int  count;
   
while ((count = fs.Read(tmpbyte, 0 ,tmpbyte.Length)) > 0 )
   
{
    Response.BinaryWrite(tmpbyte);
    Response.Flush();
   }

   fs.Close();   
   Response.End();

直接在浏览器中打开
   
string  strFile = " F:\\a.doc " ; // 路径根据实际情况而定
   Response.Clear();
   Response.ClearHeaders();
   Response.Charset 
=   " GB2312 " ;
   Response.ContentEncoding 
= System.Text.Encoding.UTF8;
   Response.ContentType 
=   " application/msword "
   Response.WriteFile(strFile);

/// <summary>
 2        /// 上传图片
 3        /// </summary>
 4        /// <param name="sender"></param>  
 5        /// <param name="e"></param>
 6        /// <returns>操作结果</returns>

 7          private   bool  ImageUpload( int  nWidth, int  nHeight)
 8          {
 9            System.Web.HttpFileCollection files = Request.Files;
10            System.Web.HttpPostedFile pf = files[0];
11            string sOldPath = pf.FileName.ToString();
12            int i = sOldPath.LastIndexOf("\\");
13            string sOldName = sOldPath.Substring(i+1,sOldPath.Length-i-1);
14            //"L"代表大图 && "S"代表缩略图
15            string sTimeNo = System.DateTime.Now.ToString("yyMMddHHmmss");
16            string sNewNameL = "L"+sTimeNo+"_"+sOldName;
17            string sNewNameS = sNewNameL.Replace("L"+sTimeNo,"S"+sTimeNo);
18            string sNewPathL = Server.MapPath("../images/uploadfiles/")+sNewNameL;
19            string sNewPathS = Server.MapPath("../images/uploadfiles/")+sNewNameS;
20            if(System.IO.File.Exists(sNewPathL)||System.IO.File.Exists(sNewPathS))
21            {
22                Page.RegisterStartupScript("FailToUpload","<script>alert('文件名已存在!');</script>");
23                return false;
24            }

25            else
26            {
27                pf.SaveAs(sNewPathL);//保存原图
28                string strContentType = pf.ContentType.ToString();
29                if(strContentType.IndexOf("image/")<0)
30                {
31                    Page.RegisterStartupScript("KeyEro","<script>alert('无效的图片格式!');</script>");
32                    return false;
33                }

34                else
35                {
36                    this.GetThumbNail(sOldPath,strContentType,sNewPathS,nWidth, nHeight);
37                    this.Image1.ImageUrl = sNewPathS;
38                    return true;
39                }

40            }

41        }

42          /// <summary>
43        /// 生成缩略图
44        /// </summary>
45        /// <param name="FileName">待上传文件的完全限定名</param>
46        /// <param name="strContentType">待上传文件的内容类型</param>
47        /// <param name="path">路径</param>
48        /// <param name="nWidth"></param>
49        /// <param name="nHeight"></param>

50          private   void  GetThumbNail( string  FileName, string  strContentType, string  path, int  nWidth, int  nHeight)
51          {
52            System.Drawing.Image oImage;
53            oImage = System.Drawing.Image.FromFile(FileName);
54            oImage = oImage.GetThumbnailImage(nWidth,nHeight,null,IntPtr.Zero);
55            //            MemoryStream ms = new MemoryStream();
56            //            Response.ContentType = strContentType;
57            //            oImage.Save(ms,strContentType);
58            oImage.Save(path,this.GetContenType(strContentType));
59            //            ms.WriteTo(Response.OutputStream);
60        }

61          /// <summary>
62        /// 获取保存文件的格式
63        /// </summary>
64        /// <param name="strContentType">待上传文件的内容类型</param>
65        /// <returns>文件格式</returns>

66          private  System.Drawing.Imaging.ImageFormat GetContenType( string  strContentType)
67          {
68            //只写少数几种格式
69            if(strContentType.ToString().ToLower()== "image/bmp")
70                return System.Drawing.Imaging.ImageFormat.Bmp;
71            else if(strContentType.ToString().ToLower()== "image/gif")
72                return System.Drawing.Imaging.ImageFormat.Gif;
73            else
74            return System.Drawing.Imaging.ImageFormat.Jpeg;
75        }

For example:

Response.ContentType 
=   " image/jpeg " ;Response.AppendHeader( " Content-Disposition " , " attachment; filename=SailBig.jpg " );Response.TransmitFile( Server.MapPath( " ~/images/sailbig.jpg " ) );Response.End();



本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2005/10/17/256596.html,如需转载请自行联系原作者
相关文章
|
6月前
|
API
【sgUpload】自定义组件:自定义上传组件,支持上传文件夹及其子文件夹文件、批量上传,批量上传会有右下角上传托盘出现,支持本地上传图片转换为Base64image。
【sgUpload】自定义组件:自定义上传组件,支持上传文件夹及其子文件夹文件、批量上传,批量上传会有右下角上传托盘出现,支持本地上传图片转换为Base64image。
针对FastAdmin新增上传多个图片,新增上传的视频的预览效果
针对FastAdmin新增上传多个图片,新增上传的视频的预览效果
869 0
|
存储 小程序 JavaScript
小程序云开发上传及使用图片
小程序云开发上传及使用图片
140 0
|
前端开发
后端处理图片的上传和下载
后端处理图片的上传和下载
170 0
|
文件存储 Android开发 数据安全/隐私保护
Android图片添加水印图片并把图片保存到文件存储
Android图片添加水印图片并把图片保存到文件存储 package zhangphil.test; import android.
1496 0
|
数据采集 JavaScript 开发者
批量下载一些图片
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
215 0
|
JavaScript
原生js实现图片单张上传及批量上传
原生js实现图片单张上传及批量上传
|
存储 Web App开发 前端开发
移动端图片操作(一)——上传
上传我们一般都是用“input[type=file]”控件。当你用此控件时,你就授权了网页和服务器访问对应的文件,就可以得到File对象。
移动端图片操作(一)——上传
|
JavaScript 程序员 API
Nodejs实现图片的上传、压缩预览、定时删除。
我们程序员日常都会用到图片压缩,面对这么常用的功能,肯定要尝试实现一番。
|
移动开发 JSON 前端开发
mPaaS H5选图预览到上传怎么做
在金融性质的App里,选择本地相册图片或者拍照,然后预览并且上传是一个典型的使用场景,比如常见的身份证信息上传。在最近接触的几家银行客户里,都反馈有类似的场景,并且在使用上都或多或少的遇到一些问题,最后找到我们,希望我们提供一些最佳实践。在这里分享下对应场景的一些优化解决方案。
257 0
mPaaS H5选图预览到上传怎么做