从同一解决方案或公共目录中的另一个项目保存和检索图像

时间:2019-02-10 08:54:18

标签: c# asp.net-mvc razor

我正在处理一个电子商务项目。在此解决方案中,我有2个项目管理部分和ui部分。问题是,如果我将图像存储在admin中,则在admin项目中可以正常工作,如何从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项目中检索它???谢谢....

3 个答案:

答案 0 :(得分:1)

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

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

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

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

有点棘手。基本上,您将需要以与生产中相同的方式来处理它,但是问题是IIS Express的透明性不如完整IIS透明。我在Visual Studio 2012和2013中采用了以下方法,但是上一次在2015年尝试使用它时,它不再起作用。不过,由于已经有一段时间了,现在可能已经解决了。无论如何,这几乎是您唯一的选择。

  1. 在“解决方案资源管理器”窗格中右键单击您的解决方案,然后选择“添加”>“新网站”。...
  2. 在出现的窗口中单击“浏览...”按钮。
  3. 单击“本地IIS”选项卡。
  4. 在列表中找到要使用共享映像目录的第一个站点,然后单击以突出显示该站点。
  5. 然后,在窗口的右上方,单击看起来像带有星号的文件夹的图标。如果将鼠标悬停在它上面一秒钟,它将显示“创建新的虚拟目录”。
  6. 在“别名”中,输入应用程序中路径部分应该是什么。例如,如果您想在http://localhost:12345/SharedImages上找到图像,则可以输入SharedImages。但是,请确保您选择的任何内容都不是项目中的实际现有目录。
  7. 对于“文件夹:”,浏览到计算机上共享图像所在的物理目录。
  8. 取消选中“创建IIS应用程序”复选框。
  9. 单击“确定”。
  10. 对其他任何网站重复步骤4-9。
  11. 在上一个窗口中单击“取消”。
  12. 在原始的“添加新网站”窗口上再次单击“取消”。 (您实际上并不会在解决方案中添加新网站。这只是访问可以创建此虚拟目录的位置的唯一方法。)

此时,您应该回到Visual Studio主窗口。您实际上不会在项目/解决方案中发现任何差异,因为这都是在IIS Express中完成的。但是,如果您浏览网站并尝试将图像加载到虚拟目录下,则应该能够在浏览器中看到它,即:

http://localhost:12345/SharedImages/foo.jpg 如果您看到该图像,则一切正常。

答案 1 :(得分:0)

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

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);
}

答案 2 :(得分:0)

在Razor View中,您可以使用以下代码显示它。

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