我有一个项目,公司的用户将使用winform HTML编辑器为特定客户提供一些文本和图片。客户将在网站上查看此信息。
处理此问题的最佳方法是什么?如果它是严格的HTML文本,那么我可以保存数据库中的所有内容,并且没有任何问题显示它。但员工希望能够展示图片...
我是否将图片保存为某个公共场所的文件,以便网站和winform程序可以看到它?这里的问题是其中是存储图片的最佳公共场所。 Web服务器将是一个锁定的服务器,没有人可以访问。我可以从ASP.Net的非本地目录中获取文件吗?
我是否将图片保存在数据库中并使程序足够智能,将图像源标签替换为数据库中的图片?我认为这可能会变得困难(绝对是在网上......如果有人建议这样做,你能给我一些关于如何在winform和网络上做这个的C#示例吗?)
我知道其他人必须在某个地方做到这一点并成功...
答案 0 :(得分:4)
我建议使用数据库存储本地图像的路径(如果可以在您的设置中使用)
EG物理图像将保存在如下路径中:
/App_Themes/Web/images/userfiles/YOURIMAGENAME.jpg
并将以下内容保存在数据库中
YOURIMAGENAME.jpg
这意味着您可能会遇到以下情况:
<asp:Image ID="imgImage" runat="sever" />
protected void Page_Load(object sender, EventArgs e)
{
//Your data-access code here
//image.ImageName is provided by your data access code.
imgImage.ImageUrl = string.Format("/App_Themes/Web/images/userfiles/{0}", image.ImageName)
}
答案 1 :(得分:0)
是的,如果您不打算限制对这些图像的访问。如果您这样做,请将它们存储在远离www root的位置,然后通过脚本发送到浏览器。
没有。最好将图像存储在光盘上以及相对路径上 - 在DB中。数据库不是存储文件的正确位置。
答案 2 :(得分:0)
请看这个
Storing Images in DB - Yea or Nay?
以及有关此主题的其他旧问题。在我看来,任何一种选择都是可能的和合法的,两者的结合也是如此(在数据库中存储文件引用)。您应该根据项目中的具体情况(未提供)做出决定,例如
答案 3 :(得分:0)
您可以轻松地将图像存储在数据库中,然后检索它们。要显示数据库中的图像,您可以使用asp.net页面(请参阅此article)或HttpHandler。
您还可以将文件存储在本地文件夹中。可以使用常规的读/写文件操作。为了使其工作,ASP.NET用户([本地机器] \ ASPNET或NETWORK SERVICE)需要对该文件夹的读/写访问权限。要使用远程文件夹,事情会更tricky,您可能会在尝试时创建安全漏洞。
作为结论,我认为最好的解决方案是使用本地文件夹。如果这不可能,请避免使用异国情调的解决方案(FTP,用户模仿,上传/加载图像的Web服务)并使用数据库。
答案 4 :(得分:0)
如果无法使用文件系统,请考虑将图像存储在云存储中,例如Amazon S3。
您可以配置S3对象,使其成为公共读取但私有写入,这样只有您的软件才能将图像添加到S3,但Web上的任何人都可以查看它们。根据您的安全要求,您可以在WinForms应用程序中编码S3密钥以构建PUT URL,或者在应用服务器上创建一个简单的Web服务,该服务对用户进行身份验证并使用服务器上的密钥创建PUT URL。然后可以将PUT URL返回给客户端,客户端可以用来上传图像数据。
使用S3,然后使用HTTP PUT上传图像,编辑器和Web浏览器都可以像往常一样使用HTTP GET访问图像。有可用的C#库和大量的示例代码可供访问S3。
您也可以对HTML数据执行相同的操作。
请注意,存在与S3相关的成本(see pricing),但假设成本在范围内,则可以很好地解决此类问题。