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

时间:2013-03-31 13:37:11

标签: asp.net visual-studio-2010 ms-access relative-path

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

保存图像后,它会被保存到一个名为AvatarURL的字段('userprofiles')中,并带有相对路径,如下所示: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

1 个答案:

答案 0 :(得分:1)

我会尝试更改以这种方式保存的路径

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

然后

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

如果UserProfileAvatar是根网站文件夹的子文件夹,这应该有用 相反,如果UserProfileAvatar是帐户文件夹的子文件夹,那么

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

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