Haskell YesSOD-用户配置文件图片是否应存储在静态目录中?

Haskell YesSOD-用户配置文件图片是否应存储在静态目录中?,haskell,yesod,Haskell,Yesod,当前用户上传的个人资料图片保存到/static/avatars/{upload date}。然后,我通过数据库中存储的信息为图像生成StaticR路由(它们是在运行时添加的,因此StaticR路由不存在) 我遇到的问题是,当用户更新他们的个人资料图片时,由于静态文件的缓存,他们仍然会得到旧图片。是否有办法解决这个问题,或者我应该将图像存储到其他地方?如果是这样的话,那么如何从say/avatars/{upload date}/{userid}.png访问图像呢 我知道我可以按照/avatars/

当前用户上传的个人资料图片保存到/static/avatars/{upload date}。然后,我通过数据库中存储的信息为图像生成StaticR路由(它们是在运行时添加的,因此StaticR路由不存在)

我遇到的问题是,当用户更新他们的个人资料图片时,由于静态文件的缓存,他们仍然会得到旧图片。是否有办法解决这个问题,或者我应该将图像存储到其他地方?如果是这样的话,那么如何从say/avatars/{upload date}/{userid}.png访问图像呢

我知道我可以按照/avatars/#Day/#UserId创建一条路线,但我不确定如何将“.png”或“.jpg”附加到该路线上。或者我将为handler函数编写什么

我知道我可以按照/avatars/#Day/#UserId创建一条路线,但我不确定如何将“.png”或“.jpg”附加到

您的url无需以
png
jpeg
扩展名结尾。您只需确保内容类型标题设置正确

或者我将为handler函数编写什么

这很简单。如果您正在为
png
图像提供服务,那么您所要做的就是使用这些功能并为它们提供服务:

myAvatarHandler = sendFile typePng "/home/yesod/static/avatars/day/userid.png"

同样在您的示例中,请确保存储上载的时间戳,并根据该时间戳更改您的url。否则,将缓存在同一天更新的两个配置文件映像。

到目前为止进行文件保存的代码是什么?我想看一下可能会有帮助。@AJFarmar文件保存是通过几个函数进行的,您是否希望看到/认为有什么特别的部分有用?如果你愿意的话,我可以把它们都放上去,但我想我会先问一下。谢谢你的回复。我对如何使用handler函数有点困惑,例如,当我想将它用作图像标记的源时。我应该为化身创建一条新路线吗?在您的回答中,您显示的路径仍然是静态的,我已经有了一种使用StaticR以静态方式为图像提供服务的方法,但问题是它们正在缓存,因此当用户上载新图像时,即使文件系统中的文件已更新,也不会显示新图像,你的答案不会有同样的问题吗?@JamesBurton如我的答案所示,我建议你存储图像的时间戳(在白天部分)。这样,您就可以保证为图片上传获得唯一的URL。好的,有什么理由我应该在您的回答中使用处理程序,而不是像以前那样生成StaticR路由吗?@JamesBurton您根本不需要使用我的处理程序,我建议您不要使用,因为它已经可以通过
/static
路径访问了!这只是一个演示示例。好的,谢谢。我将把您关于使用时间戳的建议添加到我当前的实现中。