2012-11-07 4 views
0

Как организовать загрузку файла из базы данных сервера и открыть его на клиентской машине?Загрузить с сервера db и открыть файл на клиентской машине

мой код работает только тогда, когда страница открывается на сервере:

 OracleCommand oracleCom = new OracleCommand(); 
     oracleCom.Connection = oraConnect; 
     oracleCom.CommandText = "Select m_content, f_extension From " + Session["tableNameIns"] + 
              " where i_id = " + rowData; 
     OracleDataAdapter adapter = new OracleDataAdapter(); 
     DataTable tableD = new DataTable(); 
     tableD.Locale = System.Globalization.CultureInfo.InvariantCulture; 
     adapter.SelectCommand = oracleCom; 
     adapter.Fill(tableD); 

     string FileName = Path.GetTempPath(); 
     FileName += "tempfile" + tableD.Rows[0][1]; 

     byte[] file = new byte[0]; 
     file = (byte[])tableD.Rows[0][0]; 
     FileStream fs = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write); 
     fs.Write(file, 0, file.GetUpperBound(0) + 1); 
     fs.Close(); 
     System.Diagnostics.Process.Start(FileName); 

ответ

0

Это просто невозможно в веб-приложении.
Если вы хотите это сделать, напишите приложение Windows.

Ограничения безопасности в браузере не позволят вам загружать и напрямую запускать exe из браузера.
Вы можете отправить exe в ответ, где пользователь сохраняет и запускает его вручную.

В текущей настройке exe все еще записывается и запускается на сервере, независимо от того, приходит ли запрос.

Просто боковое примечание, его намного проще в использовании WriteAllBytes для написания байтовых массивов в файлы. Вам не нужно беспокоиться о блокировках и удалении объектов таким образом.

File.WriteAllBytes(FileName, file); 
0

Спасибо за ответ! Я сделал это вот так:

Response.ContentType = "APPLICATION/OCTET-STREAM"; 
Response.AddHeader("Content-Disposition", @"attachment;filename=\" + initFileName); 
Response.BinaryWrite(file); 

Где: файл - это параметр в двоичном типе. initFileName - имя файла строки. Только 3 линии).

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