【问题标题】:In which folder can I store user uploaded images我可以在哪个文件夹中存储用户上传的图像
【发布时间】:2011-02-10 11:14:13
【问题描述】:

我在 ASP.NET/c#/MS SQL 上有一个分类广告系统,我试图找出人们在放置广告时上传的图像的存储位置。广告本身存储在 SQL 服务器数据库中。

图像现在存储在我的 web 应用程序的子文件夹中。它似乎工作正常,但是我最近才发现一个大问题。每次用户删除广告时,附加的图像也将被删除,包括它们所在的文件夹。这会导致 asp.net 应用程序重新启动。我搜索了互联网,发现重新启动网络应用程序实际上是删除子文件夹时的预期行为。

显然,我需要解决这个问题。但是怎么做呢?我可以在哪里以这样的方式存储图像:

  • 我可以删除这些图像,包括它们所在的文件夹吗?
  • 我可以使用 URL 访问它们(图像需要显示在 网页)
  • 没有让网络应用程序 重新启动? 任何反馈表示赞赏! 保罗

【问题讨论】:

    标签: asp.net restart


    【解决方案1】:

    看到这个问题Deleting a directory results in application restart

    另一种选择是将图像存储在数据库中。

    【讨论】:

    • 删除目录...是的,我发现很难...存储在数据库中?这将使数据库变得非常大且昂贵。我宁愿阻止这种情况。谢谢!
    【解决方案2】:

    另一种选择是将图像放在与网站完全无关的目录中,然后通过脚本页面或处理程序提供图像。它会让你所有的图片 url 看起来像 mydomaincom/serveimage.aspx?imageid=323422,但除非你指望某个地方的名字真的不重要。显然,它首先也需要对提供图像的页面进行修改,但是如果删除了这个不相关目录的子目录,IIS 真的根本不应该关心。

    【讨论】:

    • 编写自定义处理程序?这听起来完美的解决方案。我将包含所有广告图像的文件夹放在 webapp 文件夹之外的某个位置……我得仔细考虑一下……文件上传需要更改,ad.view、ad.publish、ad.delete……一个担心如果我用 c# 编写的“自定义”处理程序效率低于我现在正在使用的默认优化处理程序......也许,我应该考虑在 httpmodule 中设置一个 url 重写,所以我可以维护默认的图像处理程序吗?
    【解决方案3】:

    也许您可以将图像存储在 SQL 中(在这种情况下检查文件流功能) 如果没有,我想你在业务门面类、服务类或任何你想要的地方都有一个方法“DeleteAd”。

    这个方法需要做两件事:

    -删除sql数据 -删除文件图片

    此外,您可以将图像存储更改为 Web 应用程序之外的另一个文件夹。您可能会以编写一个自定义处理程序 (myhandler.ashx?fileid=XX) 来提供文件,或者如果您使用 MVC 则编写一个自定义路由和控件来结束。

    【讨论】:

    • 由于广告本身已经存储在数据库中,我认为将图像存储在那里也是一个很好的解决方案。
    • 您只需要注意性能影响。将图像存储在数据库中将比纯文件访问慢得多。这就是为什么我建议使用 SQL 2008 的文件流功能。您也可以依赖 asp.net 缓存机制,或两者的组合。
    • 感谢史蒂夫和科恩。将图像存储在数据库中会很棒,合乎逻辑......但我不能将其视为一个好的执行解决方案。此外,数据库将大幅增长。仅供参考,没有图像的数据库大小仅为包含图像的文件夹的 10%。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2021-04-27
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多