2013-12-17 3 views
1

У нас есть определенное изображение в папке \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() преобразует веб-путь в абсолютный путь на диске сервера, и пользователь IIS не имеет на это прав. Мы могли бы обойти это, предоставив доступ всем, но что-то говорит мне, что это не учебник. Разумеется, должен быть способ доступа к этому файлу, который не требует, чтобы мы начали futzing с разрешениями доступа к папке веб-развертывания?

ответ

0

решаемые путем включения файла в качестве ресурса, а не пытаться получить к нему доступ через файловую систему:

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

Hat наконечник this answer для расширения .ToStream().

Смежные вопросы