从Web项目外部的Web内容文件夹中获取图像

时间:2013-03-07 11:42:57

标签: c# asp.net-mvc asp.net-mvc-3

目标

我在同一个解决方案中有2个项目,目标是从域项目的Web项目中获取图像。

  1. Project.web(“网络应用程序”)“这是图像/内容/图像”
  2. Project.domain(“所有域名实体”)“我想从这里拿走它!!”
  3. 问题
    我试图从我的网站“内容/图像”文件夹中读取,但我不知道如何设置网址以及是否可以这样做。

    可行的丑陋和肮脏的代码是:但我不想将图像修复到文件夹>

    Image logo = Image.FromFile(@"c:\folder\img.png");
    

2 个答案:

答案 0 :(得分:2)

我花了一些时间搜索服务器变量,享受! :)

public async Task<IHttpActionResult> GetRenderImage(long id, int size = 0)
    {
        // Load template           
        var file = HttpContext.Current.Server.MapPath("~/Content/media/template.png"); 
        WebImage img = new WebImage(file);

        // some operations with image, for sample scale or crop
        ...

        // get image data
        var bytes = img.GetBytes("image/jpeg");

        // Save to blob
        var p = getCloudBlobContainer("RenderImg");
        CloudBlockBlob blob = p.GetBlockBlobReference(String.Format("{0}.jpg", id);
        blob.Properties.ContentType = "image/jpeg";

        await blob.UploadFromByteArrayAsync(bytes, 0, bytes.Length);
        var url = blob.Uri.ToString();

        // Redirect to Azure blob image
        return Redirect(url);
    }

答案 1 :(得分:1)

您意识到在IIS中部署应用程序时,不再存在其他项目的概念。因此,您应该将此图像作为ASP.NET应用程序的一部分包含在内。例如,您可以创建一个构建后编译步骤,将图像从Project.domain复制到ASP.NET MVC应用程序(例如在App_Data文件夹中),这样您在MVC应用程序中就可以了能够使用Server.MapPath方法访问图像:

using (var image = Image.FromFile(Server.MapPath("~/App_Data/img.png")))
{
    ...
}