2013-07-30 7 views
0

Я использую EPPlus (реквизиты для разработчиков для огромной библиотеки), чтобы сделать документ Excel, который будет загружен в браузере. В коде, который генерирует документ Excel, у меня есть несколько строк, которые предназначены для включения файла изображения в документ Excel.Получение пути к изображению на C#

Image logoImg = Image.FromFile(Server.MapPath("~/Images/bill_logo.png")); 
var logo = ws.Drawings.AddPicture("Logo", logoImg); 

Когда я запускаю проект локально на своей машине, изображение отображается как ожидалось. Однако, когда я раскрываю в нашей тестовой среде, в лазури, я получаю следующее сообщение об ошибке:

System.IO.FileNotFoundException: C:\DWASFiles\Sites\sitename\VirtualDirectory0\site\wwwroot\Images\bill_logo.png 
at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement) 
at System.Drawing.Image.FromFile(String filename) 
at emergePortal.Web.Controllers.BillingController.buildWorksheet(ExcelWorksheet ws, String sheetName, IEnumerable`1 lineItems) in c:\a\src\emergePortal\emergePortal.Web\Controllers\BillingController.cs:line 202 
at emergePortal.Web.Controllers.BillingController.getBill(Int32 billMonth, Int32 billYear) in c:\a\src\emergePortal\emergePortal.Web\Controllers\BillingController.cs:line 106 
at lambda_method(Closure , ControllerBase , Object[]) 
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() 
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) 
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20() 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) 

Что такое лучший способ ссылаться на этот файл изображения так, что он работает в средах?

+0

Set читать и писать на ваши изображения папки –

+0

Может быть, я не прав, Wouldn» t в первый раз, но я не верю, что вы можете редактировать разрешения в Azure. – Trevor

+0

вы можете отправить билет в Лазурный. http://www.windowsazure.com/en-us/support/options/ –

ответ

0

Указанный путь в исключении - правильный путь к этому файлу? Если да, то права? Если нет, исключение будет правильным. :)

+0

Я не уверен, что это правильный путь к файлу. У меня нет видимости в файловой структуре проекта в Azure. Я проверю права на файл - я предполагаю, что мне просто нужны права на чтение? – Trevor

+0

После некоторого поиска, я не верю, что вы можете изменить права доступа к файлам в Azure. Может кто-то поправить меня? http://stackoverflow.com/questions/11016098/folder-permissions-in-azure-web-sites – Trevor

0

У меня такая же проблема при развертывании лазурного. Server.MapPath это не работает в лазурной

я исправила эту проблему .Но я забываю, который, как решить эту problem.sorry

пожалуйста, попробуйте этот код путь. Я думаю, что я использовал этот код для вашей проблемы

// Retrieve an object that points to the local storage resource 
LocalResource localResource = RoleEnvironment.GetLocalResource("localStoreTwo"); 

//Define the file name and path 
string[] paths = { localResource.RootPath, "MyStorageTest.txt"}; 
String filePath = Path.Combine(paths); 

Подробнее см это

Getting Your Physical Application Path in Window Azure

и Msdn