求教,图片另存为问题?[高分]

vision710 2007-10-22 01:06:58
我想实现一个功能,点击一个按钮下载图片,禁止用右键的另存为.因为我要统计下载的人数.所以用按钮的点击次数来统计下载的人数.不用javascrpt,只用C#能实现不?
好像图片下载的方式和文件不一样.如果是RAR格式直接把url放在herf里就可以了.图片好像不行.效果就要想霏凡下载软件的时候这样,一点就弹出另存为,或者是下载工具来下载就可以了.不过文件得换成图片
...全文
327 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
luck0235 2007-10-23
  • 打赏
  • 举报
回复
传进来的path是网络的路径还是本地保存的路径?如果是图片存成文件流的形式还可以看到图还是2进制的编码?

---------------------

传进来的path是物理路径,你可以完全把图片放在非互联网设备中,这样也有效防止了用户通过地址猜测来下载图片。

不是图片存为文件流,而是当用户点击下载时,你即时输出stream,过程如下:

1、服务器根据传入的物理地址将图片数据载入内存。
2、从内存中将数据以STREAM方式响应用户请求。
3、客户端获取STREAM,最后拿到图片。
vision710 2007-10-23
  • 打赏
  • 举报
回复
谢谢楼上的前辈提示,我用第一个思路做出来了.有空学习下文件流下载的方式.传进来的path是网络的路径还是本地保存的路径?如果是图片存成文件流的形式还可以看到图还是2进制的编码?
luck0235 2007-10-22
  • 打赏
  • 举报
回复
在客户端是难以控制的,用户既然能看见你的图片了,但你想让他不能下载,那如果用户用截图呢,难道还得弄一个防截图功能?

如下解决方案供参考:
一、显示给用户的只是一个缩略图或加了水印的图片,这张图片不限制用户另存为,或用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();
}
losguooo 2007-10-22
  • 打赏
  • 举报
回复
// 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);
losguooo 2007-10-22
  • 打赏
  • 举报
回复
Response.ContentType = "image/jpeg";
Response.AppendHeader("Content-Disposition", "attachment; filename=tt1.jpg");
Response.TransmitFile(Server.MapPath("~/image/tt1.jpg"));
Response.End();
没问题,实现了搂住的效果,
右键屏蔽:javascript,重写页面鼠标右键单击的event.并且取消冒泡事件.
如果要用<image>的话〉〉〉那就不会了
yuan74521940 2007-10-22
  • 打赏
  • 举报
回复
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"
linxisheng 2007-10-22
  • 打赏
  • 举报
回复
只是想防止右键另存为导致漏计的事情发生的话
可以考虑用body oncontextmenu="return false"
akunshenjk 2007-10-22
  • 打赏
  • 举报
回复

//可以在这里添加统计代码
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;
ShowWin 2007-10-22
  • 打赏
  • 举报
回复
没用的..除非是浏览器不能解释执行的文件
vision710 2007-10-22
  • 打赏
  • 举报
回复
Response.ContentType = "image/jpeg";
Response.AppendHeader("Content-Disposition","attachment; filename=SailBig.jpg");
Response.TransmitFile( Server.MapPath("~/images/sailbig.jpg") );
Response.End();
这个是在网上找到的.但是看不太懂.谁能看看,这个是不是实现那个功能的阿?
ShowWin 2007-10-22
  • 打赏
  • 举报
回复
那就打包成rar
vision710 2007-10-22
  • 打赏
  • 举报
回复
访问图片做了统计了.公司要求下载还要统计一次
ShowWin 2007-10-22
  • 打赏
  • 举报
回复
浏览器会自动解释可识别的图片.不会弹出下载框..
你至少要改后缀才行..

如果你要做统计功能的话,可以用一个专门的aspx页面来输出图片,可以在访问图片的时候便可以计数了..
ojekleen 2007-10-22
  • 打赏
  • 举报
回复
mark

62,250

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧