数据库中图像的相对路径取决于解决方案中的文件夹

Posted

技术标签:

【中文标题】数据库中图像的相对路径取决于解决方案中的文件夹【英文标题】:Relative path of images in database depending on folder in solution 【发布时间】:2013-03-31 13:37:10 【问题描述】:

我有一个名为 editprofile 的 .aspx 页面,可以在 我的 ~/Account/ 文件夹中找到该页面。该页面本身允许用户上传新的用户头像、更改他们的详细信息等。

当图像被保存时,它被保存到一个表('userprofiles')中一个名为 AvatarURL 的字段中,其相对路径如下:UserProfileAvatar/image.jpg

我有一个单独的页面,位于上面的主解决方案目录中,名为 detail.aspx。我在尝试显示时遇到图像未显示的问题,发现这是因为写入数据库的路径是相对于“帐户”文件夹的。我已经设法通过在我的数据库中编辑一条记录并在其顶部附加额外的级别来完成这项工作:Account/UserProfileAvatar/image.jpg 并出现图像。

我如何补偿诸如此类的环境因素,以便我的解决方案中的不同页面(无论它们在文件夹层次结构中的哪个位置)可以毫无问题地引用放置在此文件夹中的图像?

这是我的代码:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim sql
    Dim cmd
    Dim conn As OleDbConnection = New OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
    If Not fu_avatar.HasFile Then
        sql = "UPDATE userprofiles SET EmailAddress=@f1, Description=@f2 WHERE TravellerName=@f3"
        cmd = New OleDbCommand(sql, conn)
        cmd.Parameters.AddWithValue("@f1", email.Text)
        cmd.Parameters.AddWithValue("@f2", description.Text)
        cmd.Parameters.AddWithValue("@f3", User.Identity.Name)
    Else
        sql = "UPDATE userprofiles SET EmailAddress=@f1, Description=@f2, AvatarURL=@f3 WHERE TravellerName=@f4"
        cmd = New OleDbCommand(sql, conn)
        cmd.Parameters.AddWithValue("@f1", email.Text)
        cmd.Parameters.AddWithValue("@f2", description.Text)
        cmd.Parameters.AddWithValue("@f3", "UserProfileAvatar/" & User.Identity.Name & ".jpg")
        cmd.Parameters.AddWithValue("@f4", User.Identity.Name)
        Dim fileLocationOnServerHardDisk = Request.MapPath("UserProfileAvatar") & "/" & User.Identity.Name &
    ".jpg"
        fu_avatar.SaveAs(fileLocationOnServerHardDisk)
    End If
    conn.Open()
    cmd.ExecuteNonQuery()
    conn.Close()
    DisplayData()
    SaveConfirmation.Visible = True
End Sub

【问题讨论】:

可能是你存入数据库时​​没有设置正确的相对路径。您应该确保显示该代码。 @Steve 我已经编辑了我的原始帖子以显示我的代码 【参考方案1】:

我会尝试改变这样保存的路径

 Dim rootRelativeFilePath = "~/UserProfileAvatar/" &  User.Identity.Name & ".jpg"

然后

 cmd.Parameters.AddWithValue("@f3", rootRelativeFilePath)

如果 UserProfileAvatar 是您的根站点文件夹的子文件夹,这应该可以工作。 相反,如果 UserProfileAvatar 是 Account 文件夹的子文件夹,那么

 Dim rootRelativeFilePath = "~/Account/UserProfileAvatar/" &  User.Identity.Name & ".jpg"

通过这种方式,您始终可以保存相对于站点根目录的路径。因此,每个尝试加载该文件的页面都可以通过Server.MapPath 检索它,而不会被当前页面文件夹所迷惑。

【讨论】:

以上是关于数据库中图像的相对路径取决于解决方案中的文件夹的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中图像的相对路径

如何获取相册中图像的图像文件名和标签?

css 中图像的相对 URL (Zkoss)

相对于情节提要中图像的特定点定位元素

如何获取 Cakephp 中图像的完整 URL?

django imagefield中图像的相对url映射