1

我有一个名为 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
4

1 回答 1

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而不会被当前页面文件夹所迷惑。

于 2013-03-31T13:56:31.047 回答