现在要实现这样的功能:调用别人的接口获的图片的二进制格式的数据,然后我将其写到某个文件夹下面,数据库中保存一个地址.图片有更新的时候把旧的图片删除上面的过程具体代码应该如何实现了?C#版的.如果是一个站里中的一个文件专门存放图片,保存图片地址的时候的在决对地址和相对地址上有没有什么要注意的地方?

解决方案 »

  1.   

    我使用VB.net,
    C#接触不多
      

  2.   

    ASP.NET如何存取SQL Server数据库图片
     SQL Server提供了一个特别的数据类型:image,它是一个包含binary数据的类型。下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。在这篇文章中我们要看到如何在SQL Server中存储和读取图片。
      1、建立一个表:  在SQL SERVER中建立这样结构的一个表: 列名  类型  目的 
     ID  Integer  主键ID 
     IMGTITLE  Varchar(50)  图片的标题 
     IMGTYPE  Varchar(50)  图片类型. ASP.NET要以辨认的类型 
     IMGDATA  Image  用于存储二进制数据 
         2、存储图片到SQL SERVER数据库中  为了能存储到表中,你首先要上传它们到你的WEB 服务器上,你可以开发一个web form,它用来将客户端中TextBox web control中的图片入到你的WEB服务器上来。将你的 encType 属性设置为:myltipart/formdata.Stream imgdatastream = File1.PostedFile.InputStream;
    int imgdatalen = File1.PostedFile.ContentLength;
    string imgtype = File1.PostedFile.ContentType;
    string imgtitle = TextBox1.Text;
    byte[] imgdata = new byte[imgdatalen];
    int n = imgdatastream.Read(imgdata,0,imgdatalen);
    string connstr=((NameValueCollection)Context.GetConfig("appSettings"))["connstr"];SqlConnection connection = new SqlConnection(connstr);SqlCommand command = new SqlCommand
             ("INSERT INTO ImageStore(imgtitle,imgtype,imgdata)
             VALUES ( @imgtitle, @imgtype,@imgdata )", connection );SqlParameter paramTitle = new SqlParameter
             ("@imgtitle", SqlDbType.VarChar,50 );paramTitle.Value = imgtitle;
    command.Parameters.Add( paramTitle);SqlParameter paramData = new SqlParameter( "@imgdata", SqlDbType.Image );
    paramData.Value = imgdata;
    command.Parameters.Add( paramData );SqlParameter paramType = new SqlParameter( "@imgtype", SqlDbType.VarChar,50 );
    paramType.Value = imgtype;
    command.Parameters.Add( paramType );connection.Open();
    int numRowsAffected = command.ExecuteNonQuery();
    connection.Close();   3、从数据库中恢复读取  现在让我们来从SQL Server中读取我们放入的数据吧!我们将要输出图片到你的浏览器上,你也可以将它存放到你要的位置。private void Page_Load(object sender, System.EventArgs e)
    {
     string imgid =Request.QueryString["imgid"];
     string connstr=((NameValueCollection)
     Context.GetConfig("appSettings"))["connstr"];
     string sql="SELECT imgdata, imgtype FROM ImageStore WHERE id = " + imgid;
     SqlConnection connection = new SqlConnection(connstr);
     SqlCommand command = new SqlCommand(sql, connection);
     connection.Open();
     SqlDataReader dr = command.ExecuteReader();
     if(dr.Read())
     {
      Response.ContentType = dr["imgtype"].ToString();
      Response.BinaryWrite( (byte[]) dr["imgdata"] );
     }
     connection.Close();
    }   要注意的是Response.BinaryWrite 而不是Response.Write.
      

  3.   

    还有一个问题就是:如果是存到数据库中的,使用Response.BinaryWrite的话就的有一个单独的页面专门用来写(显示)图片,现在我想这样做:把图片写到客户端的某个地方如cache中,然后页面上用image控件引用这个地址,这样要如何做了,?
      

  4.   

    只要日期事件有变动,就用System.IO.FileInfo类下的方法删除文件即可但是
    1. 要保证此操作的用户有读写权限
    2. 要先上传成功再删除原有图片
      

  5.   

    amandag 
    能写点示例代码吗,写图片和删的
      

  6.   

    我现在就是用的那种方法,问题中是想换一种方法,如果还是用2楼的方法的话就换成这样的实现"还有一个问题就是:如果是存到数据库中的,使用Response.BinaryWrite的话就的有一个单独的页面专门用来写(显示)图片,现在我想这样做:把图片写到客户端的某个地方如cache中,然后页面上用image控件引用这个地址,这样要如何做了,?"
      

  7.   

    我靠,,,我以为写图片跟一般的文件不一样了,其实是一样的,就这么简单,,,,拖管下的代码如下:
    FileStream^ fw = File::OpenWrite(L"D:\\test\\test.jpg");
    BinaryWriter^ bw = gcnew BinaryWriter(fw);
    bw->Write(imgData);
    bw->Close();
    fw->Close();谢谢各位,还有这个问题请大家帮忙解决下:
    如果是存到数据库中的,使用Response.BinaryWrite的话就的有一个单独的页面专门用来写(显示)图片,现在我想这样做:把图片写到客户端的某个地方如cache中,然后页面上用image控件引用这个地址,这样要如何做了,?"