访问不同项目中的图像,但在同一解决方案中

时间:2014-07-31 03:56:13

标签: asp.net asp.net-mvc asp.net-mvc-4 path shared-hosting

我为一个客户创建了这个网站,希望能够上传图像,然后使用这些图像在他的网站上创建一些动态内容。一切正常,但现在我想在子域上隔离管理部分(他可以在哪里添加图像并创建他的内容)。

所以目前,我有两个项目。图片上传到的地方,以及必须访问这些图片的人(这是我的问题)。

我已阅读与此问题相关的多个主题,但尚未找到解决方案,我永远无法在当前项目之外找到路径。

我现在想的唯一可行的方法是在主网站上安装某种API,当图像上传到管理网站时,将该文件发送到主网站,但这看起来很漂亮知道我的图像将在同一台服务器上的过度杀伤。

  • 可以这样做吗?
  • 实现这一目标的最干净/最好的方法是什么?

请注意:

  • 不能选择将图像保存到数据库。上传服务器上的文件然后只存储路径要快得多。
  • 我的图片在运行时上传,我无法使用任何依赖资源/编译时的内容。

谢谢!

更新(解决方案)

而不是仅在数据库中保存文件(图像)的名称,例如" image1.png"然后我尝试在另一个项目中检索路径,最后在数据库中保存绝对URL,以便我可以直接使用该URL。

public static string ResolveServerUrl(string serverUrl, bool forceHttps)
{
  if (serverUrl.IndexOf("://") > -1)
    return serverUrl;

  string newUrl = serverUrl;
  Uri originalUri = System.Web.HttpContext.Current.Request.Url;
  newUrl = (forceHttps ? "https" : originalUri.Scheme) +
                "://" + originalUri.Authority + newUrl;
  return newUrl;
} 

这将为您提供一个类似http://yourdomain/path/to/image.jpg的URL,因此您可以将其直接保存在数据库中,并在另一个项目中使用它。

1 个答案:

答案 0 :(得分:0)

  

我现在想的唯一可行的方法是在主网站上安装某种API,当图像上传到管理网站时,将该文件发送到主网站

我认为你只是回答了自己的问题。这确实是要走的路,或者我应该说你正朝着企业SOA架构的正确方向......你仍然远离它。但是,这是一个良好的开端,您开始意识到您的系统正在发展并要求更强大的架构

  

但是,知道我的图像将在同一台服务器上,这似乎相当矫枉过正。

这是一个错误的陈述,因为如果您设计得很好,您可以轻松扩展到不同的服务器和平台,而不会影响您的客户端应用程序。假设将来,内容被移动到自己的服务器,您只需对您的“内容服务”进行相关修改,而您的客户端应用程序根本不需要更改,它们仍指向相同的端点,永远不会注意到“内容服务”的内部发生了什么。这意味着您的客户端应用程序只关心从“内容服务”获取内容而不知道内容实际托管的位置,无论是在Windows Server,Linux服务器,Sql数据库,Oracle数据库,在美国还是中国。客户端应用程序不负责处理内容的处理方式,而只需知道如何提供内容

希望它有意义。我可以为您提供一些解释此类架构绝对优势的链接