在网站上加载内部文件的推荐方法是什么?

时间:2013-12-17 09:03:14

标签: asp.net asp.net-mvc-4 iis-7.5

我们网站的\Images文件夹中有一个特定的图片。我们需要将该图像包含在我们内部生成的OpenXml文件中,为此我们使用以下代码段:

var logo = Server.MapPath(@"~\Images\logo-new.png");
var imagePart = mainPart.AddImagePart(ImagePartType.Png); // mainPart is of type MainDocumentPart
using (var stream = new FileStream(logo, FileMode.Open))
{
    imagePart.FeedData(stream);
}

之后imagePart用于嵌入文档。

此代码在开发中运行良好,但在部署中,当我们尝试打开文件进行流式处理时,我们得到System.UnauthorizedAccessException

显然存在访问权限问题,因为Server.MapPath()正在将Web路径转换为服务器驱动器上的绝对路径,并且IIS用户没有权限。我们可以通过授予每个人访问权限来解决这个问题,但有些事情告诉我,这不是教科书的做法。当然必须有一种访问此文件的方法,不需要我们开始使用Web部署文件夹的访问权限吗?

1 个答案:

答案 0 :(得分:0)

通过将文件包含为资源而不是尝试通过文件系统访问它来解决:

var logo = Resources.logo_new;
var imagePart = mainPart.AddImagePart(ImagePartType.Png);
using (var stream = logo.ToStream(ImageFormat.Png))
{
    imagePart.FeedData(stream);
}

.ToStream()扩展程序提示this answer