2013-05-30 2 views
0

У меня есть гибкое веб-приложение, которое, когда пользователь нажимает кнопку, делает вызов службы на сервер. Внутри вызова службы создается пользовательский объект-экспортер, и в этом объекте создается файл PDF с помощью iTextSharp. Я хочу, чтобы иметь возможность генерировать URL-адрес местоположения файла в этом вызове службы и передавать его обратно в приложение flex для использования с FileReference.download(). Сервисный вызов просто получает объект, который содержит данные, необходимые для PDF, из идентификатора, переданного функции, создает объект-экспортер и отправляет обратно путь к файлу. Внутри функции экспортном объекта экспортера это выглядит так:Создать URL-адрес для загрузки динамически сгенерированного файла на сервере

 this.ObjectId = object.Id; 
     Document doc = new Document(); 
     PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream("C:/temp/TestBoth.pdf", FileMode.Create)); 
     MyPageEventHandler e = new MyPageEventHandler(this.ObjectId); 
     writer.PageEvent = e; 
     doc.Open(); 
     this.ExportThingOne(object, true, doc, writer); 
     doc.NewPage(); 
     this.ExportThingTwo(object, true, doc); 

     doc.Close(); 

     System.Web.UI.Page page = new System.Web.UI.Page(); 
     string serverPath = page.Server.MapPath("C:/temp/TestBoth.pdf"); 
     return serverPath; 

Файл генерируется совершенно в C: /temp/TestBoth.pdf на моей локальной машине (только тестирование вещи локально перед нажатием на действительном сервере), однако Я получаю исключение, когда я пытаюсь выполнить page.Server.MapPath("C:/temp/TestBoth.pdf");. Я пропустил какой-то шаг, чтобы установить сервер страницы на что-то или есть еще один способ получить путь к серверу?

ответ

1

Когда вы запускаете веб-приложение локально с помощью отладчика, вы используете свои собственные учетные данные для идентификации против операционной системы. Когда вы затем развертываете его на сервере, он запускается под любой идентификацией, установленной в вашем пуле приложений, как обычно - сетевом сервисе или IIS_USR. Ни один из этих пользователей не имеет доступа к папке c:/Temp /, поэтому вы получаете исключение. Либо измените права доступа к папке (и, желательно, сохраните в своей собственной папке веб-приложения вместо общей папки temp), либо сохраните их в другом месте, например в поле varbinary в базе данных.

+0

Я никогда не работал с сохранением файла в «поле varbinary в базе данных», не могли бы вы привести пример такой вещи? – user2216177

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