我们网站的\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部署文件夹的访问权限吗?
答案 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。