禁用直接访问图像

Cra*_*aig 9 c# asp.net imaging

我正在制作一个小家庭相册,打算可以打开其他人以便以后存储图像.

我将图像上传到〜\ images \,然后将它们调整大小3次(普通视图...缩略图和小版本)并将它们移动到〜\ images\thumbs,〜\ images \normal,〜\ images\tiny然后将原稿移动到〜\ images\original.

如果用户知道文件名,他们可以直接访问http://mysite.com/images/normal/filename.jpg进行直接访问.

我宁愿不让他们使用.

那么,有没有办法改变asp:Image控件的ImageUrl,而不是从不可访问的文件夹中读取?这会是一次性能打击吗?我想的是(不确定是否可能)将图像读入Steam,并以某种方式设置ImageUrl或者什么,从流中读取?

希望你能提供帮助.

com*_*ech 10

答案是肯定的.您可以使用特殊格式的img src,它将图像直接嵌入页面中.

您将使用以下格式代替URL:

<img src="data:image/png;base64,..." />
Run Code Online (Sandbox Code Playgroud)

data指定图像的mime类型,base64之后的...是图像的base64编码内容.

此行为由此RFC定义.

这是一个例子:

在HTML中:

<img id="MyPicture" runat="server" border="0" />
Run Code Online (Sandbox Code Playgroud)

在代码隐藏中:

    protected void Page_Load(object sender, EventArgs e)
    {
        MyPicture.Src = @"data:image/gif;base64," + EncodeFile(Server.MapPath(@"/images/test.gif"));
    }

    private string EncodeFile(string fileName)
    {
        return Convert.ToBase64String(File.ReadAllBytes(fileName));
    }
Run Code Online (Sandbox Code Playgroud)