【问题标题】:Best Practice for Saving Images保存图像的最佳实践
【发布时间】:2010-10-18 12:05:29
【问题描述】:

我允许我网站管理面板的用户上传照片,这是一个简单的过程,我检查图像的有效性,然后将其保存到文件夹中,然后我还必须记录一些数据库记录该图像以后能够检索它,我的保存功能如下...... 将图片上传并保存在文件夹中的函数,我在另一个函数中构造了一个名称:

My_HTMLInputFile.PostedFile.SaveAs(HttpContext.Current.Server.MapPath("~/photos\" & pta.FileName))

以及为同一张图片创建数据库记录的函数:

Public Function InsertPhoto() As Integer
        Dim pta As New GKPTableAdapters.tblPhotosTableAdapter
        Return pta.InsertPhoto(PhotoCaption, PhotoDescription, ("http://www.myURL.com/photos/" & FileName), IsDefault, IsPicture)
    End Function

现在我知道我正在做的事情充满了违反最佳实践的行为,所以请指出我应该做的事情,记住用户以后可能会删除图片,所以我想确保我可以删除图片的数据库和文件,整个路径问题让我很困惑:P

提前致谢。

【问题讨论】:

    标签: asp.net vb.net file file-upload image


    【解决方案1】:

    我马上就注意到了,您正在将完整路径硬编码到图像中。

    我只是存储图像名称,然后在应用程序中显示时添加相对路径

    如果您允许您的用户通过您的应用程序删除文件,您应该删除数据库中的记录,然后使用File.Delete method删除文件本身

    【讨论】:

      【解决方案2】:

      您可能还想查看您的文件名生成。例如,如果您使用图像数据的 md5 哈希作为文件名,则可以防止人们上传重复的图像,并且您也不必想办法为图像生成“唯一”名称。

      如果其中有公众不应该看到的图像并且您的命名政策是可预测的,那么将您的照片目录直接暴露在互联网上可能不是一个好主意。人们会开始猜测图片的 URL 并偶然发现他们不允许看到的东西。

      【讨论】:

      • 其实所有的图片都是公开的,所以不用担心,我的命名功能只需要数据时间和秒,然后反转文件的名称,然后附加扩展名,所以没有重复..
      猜你喜欢
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 2020-12-18
      • 2014-05-23
      相关资源
      最近更新 更多