C# 在同一解决方案或公用目录中保存和检索另一个项目中的图像

C# 在同一解决方案或公用目录中保存和检索另一个项目中的图像,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我正在从事一个电子商务项目。在这个解决方案中,我有两个项目管理部分和ui部分。问题是,如果我在管理中存储图像,它在管理项目中工作正常,我如何从UI项目访问它?或者我必须在解决方案中创建一个公共目录来存储和检索图像,我不知道该做什么以及如何做,请帮助我 对于保存图像,我的代码是 public static string SaveAnImage(HttpPostedFileBase file, string path) { string fileName = "";

我正在从事一个电子商务项目。在这个解决方案中,我有两个项目管理部分和ui部分。问题是,如果我在管理中存储图像,它在管理项目中工作正常,我如何从UI项目访问它?或者我必须在解决方案中创建一个公共目录来存储和检索图像,我不知道该做什么以及如何做,请帮助我

对于保存图像,我的代码是

public static string SaveAnImage(HttpPostedFileBase file, string path)
    {
        string fileName = "";
        string vFileName = Guid.NewGuid().ToString();
        string fileExtension = Path.GetExtension(file.FileName)?.ToLower();
        if (fileExtension != null)
        {
            path += vFileName;
            path += fileExtension.ToLower();

            file.SaveAs(path);
            fileName = vFileName + fileExtension.ToLower();
        }
        return fileName;
    }
并重新阅读一个图像

ProductImage = Path.Combine(_mainImagepath , objDataReader["ProductImage"].ToString());

现在我如何从UI项目中检索它???谢谢

从服务器获取文件流有多种方法。因此,对于静态文件,您可以使用@Url.Contentyourfilepath在视图中创建下载链接,或者创建一个操作来下载文件流:

public FileResult GetMyFile()
{
    byte[] fileBytes = System.IO.File.ReadAllBytes(@"c:\folder\myfile.ext");
    string fileName = "myfile.ext";
    return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}

在Razor视图中,您可以使用以下代码显示它

<img src="@Url.Content("/imagesfolder/image123.jpg")" alt="Image" >

这实际上是两个独立的问题:

如何在生产环境中共享文件夹

如果站点位于同一台服务器上,那么您可以将共享映像几乎放在同一台服务器上的任何位置。如果它们位于不同的服务器上,则需要将两台服务器上的网络位置映射到映像所在的位置。在任何一种情况下,您都将在两个站点上的IIS中创建一个指向该共享位置的虚拟目录

如何在开发(即Visual Studio)中共享文件夹

这有点棘手。基本上,您需要以与生产中相同的方式处理它,但问题是iisexpress不如完整的IIS透明。我在Visual Studio 2012和2013中采用了以下方法,但上一次尝试是在2015年,它不再有效。不过,这可能已经解决了,因为已经有一段时间了。不管怎样,这几乎是你唯一的选择

右键单击解决方案浏览器窗格中的解决方案,然后选择添加>新建网站。。。。 单击浏览。。。结果窗口上的按钮。 单击本地IIS选项卡。 在列表中找到要使用共享映像目录的第一个站点,然后单击它以高亮显示。 然后,在窗口的右上角,单击看起来像一个带星星的文件夹的图标。如果您将鼠标悬停在它上面一秒钟,它会说创建新的虚拟目录。 在Alias name:中,输入应用程序中的路径部分。例如,如果您想在中查找图像,则可以输入SharedImages。但是,请确保您选择的内容不是项目中实际存在的目录。 对于文件夹:,浏览到共享映像位于计算机上的物理目录。 取消选中“创建IIS应用程序”复选框。 单击“确定”。 对任何其他站点重复步骤4-9。 单击上一窗口上的“取消”。 在原始的“添加新网站”窗口中再次单击“取消”。实际上,您不会将新网站添加到解决方案中。这只是访问可以创建此虚拟目录的位置的唯一方法。 此时,您应该返回到VisualStudio主窗口。实际上,您不会注意到项目/解决方案中的任何差异,因为这都是在IIS Express中完成的。但是,如果您浏览网站并尝试在虚拟目录下加载图像,您应该能够在浏览器中看到它,即:


如果您看到图像,一切正常。

您应该使用@Url.Content映射到文件位置的绝对路径;我如何将我的管理项目特定路径导入UI项目?我尝试使用绝对路径,如F:\Admin\File;但它给出了一个错误,无法访问本地resources@Url.Content将虚拟路径解析为绝对路径。示例:Url.Content~/images/image.jpg我通过在IIS中创建虚拟目录来解决此问题,但在visual studio中,我只是从admin中复制文件夹并在UI中对其进行害虫检测,得到此错误:无法像使用方法一样使用非invocable成员文件。感谢您的回答,我在步骤10中有点困惑,我按照您所说的做了,但我没有找到@Add new website,我找到了现有的网站,其余的都是一样的,创建了虚拟目录,但是当我运行我的项目时,IIS运行了两个不同的站点,localhost:60225和localhost:50512,第一个主机可以得到文件,但第二个主机没有找到,我不知道我做错了什么。