Прочитать файл из базы данных

Я сохранил текстовый файл в виде строки в столбце базы данных. Теперь на одной из моих страниц aspx у меня есть ссылка... Я хочу открыть текстовый файл, когда пользователь нажимает на эту ссылку. Как я могу прочитать файл из базы данных. Я знаю, как это сделать с помощью streamreader для файла, хранящегося на диске.

Спасибо


person Mithil    schedule 17.11.2008    source источник


Ответы (4)


Если вам действительно нужно хранить файл в базе данных (и я полностью согласен с Уиллом в этом, вы не должны этого делать), вы можете подумать о реализации отдельной страницы загрузки (например, getfile.aspx), которая отвечает за получение строка из базы данных на основе идентификатора, возможно ( getfile.aspx?fileId=12345 ), установка соответствующих заголовков HTTP и вывод содержимого непосредственно в браузер. Установив заголовок типа содержимого, вы сможете заставить браузер видеть страницу aspx в виде файла txt или любого другого распознаваемого формата файла.

Я настоятельно рекомендую попытаться изменить область проекта, чтобы не хранить файл в БД, поскольку этот метод может очень быстро стать очень грязным.

person ZombieSheep    schedule 17.11.2008
comment
Да, это то, что я делаю, но проблема в самом коде. У меня есть файловый поток oFileStream = System.IO.File.Open(sFullFilePath, IO.FileMode.Open, System.IO.FileAccess.Read), но я не могу его использовать, потому что у меня нет пути к файлу, так как у меня есть содержимое в строке sFileToBeProcessed - person Mithil; 18.11.2008

Это потребует некоторого разъяснения.

Если файл хранится в базе данных в виде строки, все, что вам нужно сделать, это прочитать его в строку и отобразить на странице.

public void Page_Load(object sender, EventArgs e)
  var text = (from x in dataContext.MyTextTable where x.Id == someId select x.FileText).FirstOrDefault();

  this.textBox.Text = text;
}

Хорошо, вот что вам нужно сделать. Псевдокод следует:

Загрузить строку из базы данных
Использовать метод ToCharArray() для строки, чтобы получить массив символов Использовать объект HttpResponse для Write() массива символов в поток ответа

Вот почти компилируемый код:

public void Page_Load(object sender, EventArgs e)
{
  var text = Repository.GetTextFile(this.FileTextBox.Text).ToCharArray();

  Response.Clear();
  Response.AddHeader("Content-Disposition", "attachment; filename=" & this.FileTextBox.Text);
  Response.AddHeader("Content-Length", text.Length.ToString());
  Response.ContentType = "application/octet-stream";
  Response.Write(text, 0, text.length);
  Response.End();
}

Я считаю, что тип mime должен быть таким, а не text/plain, поскольку браузер может попытаться открыть файл, а не сохранить его как вложение.

person Community    schedule 17.11.2008
comment
Нет... Я хочу открыть файл как вложение (с возможностью сохранения, сохранения и т. д.). Извините, если мой вопрос был не ясен. Спасибо - person Mithil; 18.11.2008

он охватывает базу данных и тип blob... должен быть полезен.

http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/uploading-files-to-mysql-database.aspx

person Topica    schedule 23.02.2011

Почему вы хотите хранить файл в столбце базы данных? Базы данных лучше подходят для того, что вам действительно нужно запрашивать... Это полезно для таких запросов, как «дайте мне все указанные ссылки за последние 30 дней» или «получите все синие автомобили с внутренней отделкой из ткани».

Файлы просто лучше обрабатываются файловой системой ОС. Однако, если у вас должна быть запись о файле, вы можете поместить запись и вместо этого указать путь к файлу в столбце строки.

person Cheery    schedule 17.11.2008
comment
Это требование проекта... Я не имею права голоса по этому поводу. Спасибо - person Mithil; 18.11.2008