我想实现一个功能,点击一个按钮下载图片,禁止用右键的另存为.因为我要统计下载的人数.所以用按钮的点击次数来统计下载的人数.不用javascrpt,只用C#能实现不?
好像图片下载的方式和文件不一样.如果是RAR格式直接把url放在herf里就可以了.图片好像不行.效果就要想霏凡下载软件的时候这样,一点就弹出另存为,或者是下载工具来下载就可以了.不过文件得换成图片

解决方案 »

  1.   

    浏览器会自动解释可识别的图片.不会弹出下载框..
    你至少要改后缀才行..如果你要做统计功能的话,可以用一个专门的aspx页面来输出图片,可以在访问图片的时候便可以计数了..
      

  2.   

    Response.ContentType = "image/jpeg";
    Response.AppendHeader("Content-Disposition","attachment; filename=SailBig.jpg");
    Response.TransmitFile( Server.MapPath("~/images/sailbig.jpg") );
    Response.End();
    这个是在网上找到的.但是看不太懂.谁能看看,这个是不是实现那个功能的阿?
      

  3.   


    //可以在这里添加统计代码
    Response.ContentType = "image/jpeg"; 
    Response.AppendHeader("Content-Disposition","attachment; filename=SailBig.jpg"); 
    Response.TransmitFile( Server.MapPath("~/images/sailbig.jpg") ); 
    Response.End(); SailBig.jpg是你要下载的图片.
    假设上面的代码的页面文件名为:down.aspx你可以这样写.down.aspx?image=SailBig.jpg;
      

  4.   

    只是想防止右键另存为导致漏计的事情发生的话
    可以考虑用body oncontextmenu="return false"
      

  5.   

    Response.ContentType = "image/jpeg"; 
    Response.AppendHeader("Content-Disposition","attachment; filename=SailBig.jpg"); 
    Response.TransmitFile( Server.MapPath("~/images/sailbig.jpg") ); 
    Response.End(); 
    这个是在网上找到的.但是看不太懂.谁能看看,这个是不是实现那个功能的阿?
    ------------------------
    这个不是从数据库读出来的方法???
    只屏蔽掉右键不行??? oncontextmenu="window.event.returnValue=false" 
      

  6.   

            Response.ContentType = "image/jpeg";
            Response.AppendHeader("Content-Disposition", "attachment; filename=tt1.jpg");
            Response.TransmitFile(Server.MapPath("~/image/tt1.jpg"));
            Response.End(); 
    没问题,实现了搂住的效果,
    右键屏蔽:javascript,重写页面鼠标右键单击的event.并且取消冒泡事件.
    如果要用<image>的话〉〉〉那就不会了
      

  7.   

        // Identify the file to download including its path.
        string filepath = DownloadFileName;    // Identify the file name.
        string filename = System.IO.Path.GetFileName(filepath);    Response.Clear();    // Specify the Type of the downloadable file.
        Response.ContentType = "application/octet-stream";    // Set the Default file name in the FileDownload dialog box.
        Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);    Response.Flush();    // Download the file.
        Response.WriteFile(filepath);
      

  8.   

    在客户端是难以控制的,用户既然能看见你的图片了,但你想让他不能下载,那如果用户用截图呢,难道还得弄一个防截图功能?如下解决方案供参考:
    一、显示给用户的只是一个缩略图或加了水印的图片,这张图片不限制用户另存为,或用javascript限制一些初级用户。二、当用户点击“下载图片”按钮时,利用服务端代码实现下载,最简单的方法是Response.Redirect("pic url"); 但更安全的是用数据流的方式:using System.IO;/// <summary>
        /// 以流的方式提供下载
        /// </summary>
        /// <param name="path">文件路径</param>
        protected void DownLoad(string path)
        {
            FileInfo file = new FileInfo(path);
            Response.Clear();
            Response.ClearHeaders();
            Response.Buffer = false;
            Response.ContentType = "application/octet-stream";
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(file.FullName, System.Text.Encoding.UTF8));
            Response.AppendHeader("Content-Length", file.Length.ToString());
            Response.WriteFile(file.FullName);
            Response.Flush();
            Response.End();
        }
      

  9.   

    谢谢楼上的前辈提示,我用第一个思路做出来了.有空学习下文件流下载的方式.传进来的path是网络的路径还是本地保存的路径?如果是图片存成文件流的形式还可以看到图还是2进制的编码?
      

  10.   

    传进来的path是网络的路径还是本地保存的路径?如果是图片存成文件流的形式还可以看到图还是2进制的编码?---------------------传进来的path是物理路径,你可以完全把图片放在非互联网设备中,这样也有效防止了用户通过地址猜测来下载图片。不是图片存为文件流,而是当用户点击下载时,你即时输出stream,过程如下:1、服务器根据传入的物理地址将图片数据载入内存。
    2、从内存中将数据以STREAM方式响应用户请求。
    3、客户端获取STREAM,最后拿到图片。