Создать файл в ASP.Net - PullRequest
       39

Создать файл в ASP.Net

1 голос
/ 28 августа 2009

Мое веб-приложение хочет отправить файл в виде вложения в электронное письмо. Это вполне выполнимо; все, что я должен сделать, это указать путь к файлу. Но перед отправкой файла система должна создать файл - это отрендеренный отчет. Не имеет значения, где оно сохранено, поскольку оно будет во вложении. В таком случае я не могу понять, как написать этот файл. Он работает на моем локальном хосте, но не тогда, когда я запускаю его на сервере разработки нашей компании. Сообщение об ошибке 500; неописуемый и неизвестный.

Это часть обработчика событий, которая возникает, когда пользователь нажимает кнопку, чтобы сгенерировать отчет, который будет отправлен его боссу по электронной почте:

В этом фрагменте кода ext - это некоторое переменное трехбуквенное расширение файла, а content - это содержимое, возвращаемое значение выполнения Render для объекта ReportExecutionService:

var rptPath = HttpContext.Current.Server.MapPath(string.Format("Report.{0}", ext));
//using (var fs = new FileStream(rptPath, FileMode.OpenOrCreate, FileAccess.Write))
using (var fs = File.Create(rptPath))
{
    fs.Write(content, 0, content.Length);
}

... в этот момент выдается исключение. Я предоставил привилегии на запись учетной записи NetworkService, щелкнув правой кнопкой мыши файловую систему сервера разработки и ослабив разрешения для этой учетной записи. Я также ослабил безопасность в IIS 6, где размещается веб-приложение на сервере разработки. Что еще нужно сделать? Я просто хочу выплюнуть файл .pdf в корневой веб-каталог.

Ответы [ 3 ]

1 голос
/ 29 августа 2009

Вы можете попробовать использовать метод System.IO.Path.GetTempFileName . «Это создает нулевой байт временный файл с уникальным именем на диске и возвращает полный путь к этому файлу». Он создает его в системном временном каталоге, поэтому вам не нужно беспокоиться об очистке и т. Д.

0 голосов
/ 29 августа 2009

Это работает, когда я щелкаю правой кнопкой мыши по папке и предоставляю разрешения безопасности полный доступ к учетной записи ASPNET. Это не сработало, когда я предоставил это учетной записи NetworkService, но сработало, когда я предоставил ASPNET.

0 голосов
/ 28 августа 2009

Серверы ASP обычно ограничивают папки, в которые разрешено писать сценарии. Как правило, приложению ASP необходимо иметь выделенную папку, настроенную для доступа на запись. Поскольку вы указываете относительный путь к файлу MapPath () без начальных слешей, он вернет полный путь к файлу, который находится в той же папке, что и вызывающий файл .asp, который вряд ли будет доступен для записи в сценарии.

...