2014-01-16 2 views
0

У меня есть SaveFileDialog для сохранения файла из базы данных.SaveFileDialog не открывается в производственной среде

Работает нормально, пока я не размещаю сайт на IIS. Затем он начинает открывать отладчик. Видимо, диалог блокируется, но у меня нет дальнейших идей о том, что я могу использовать вместо этого.

Мой код.

SaveFileDialog save = new SaveFileDialog(); 
save.FileName = tbl.Rows[0][0].ToString(); 

if (save.ShowDialog() == DialogResult.OK && save.FileName != "") 
{ 
    FileStream FS1 = new FileStream(save.FileName, FileMode.Create); 
    byte[] blob = (byte[])tbl.Rows[0][1]; 
    FS1.Write(blob, 0, blob.Length); 
    FS1.Close(); 

    FS1 = null; 
} 

Любая помощь будет принята с благодарностью.

+0

As asid e, 'Dispose()' вашего 'FileStream''. Устанавливая его на null, вы ничего не покупаете. –

+0

Чтобы продлить действие на Ed, используйте инструкцию 'using' для очистки FileStream. – kdh

ответ

1
String FileName = tbl.Rows[0][0].ToString(); 
String FilePath = "C:/...."; //Replace this 

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
response.ClearContent(); 
response.Clear(); 
response.ContentType = "text/plain"; 
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); 
byte[] blob = File.ReadAllBytes(FilePath); 
response.BinaryWrite(blob); 
response.Flush(); 
response.End(); 
+0

Итак, в чем проблема? Вы получили сообщение об ошибке? Это кажется мне достойным решением. –

2

Я предполагаю, что вы используете Windows Forms SaveFileDialog на веб-сайте ASP.NET. Это невозможно. Возможно, он работает на вашей машине разработки, поскольку служба Cassini работает как текущий пользователь.

Решение:

Написать то, что работает для ASP.NET

0

Существует HttpContext.Current.Response.Write и HttpContext.Current.Response.BinaryWrite и браузер клиента должен обрабатывать, как сохранить его

using System; 
using System.IO; 
using System.Web.UI; 

public partial class _Default : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    // 1. 
    // Get path of byte file. 
    string path = Server.MapPath("~/Adobe2.png"); 

    // 2. 
    // Get byte array of file. 
    byte[] byteArray = File.ReadAllBytes(path); 

    // 3A. 
    // Write byte array with BinaryWrite. 
    Response.BinaryWrite(byteArray); 

    // 3B. 
    // Write with OutputStream.Write [commented out] 
    // Response.OutputStream.Write(byteArray, 0, byteArray.Length); 

    // 4. 
    // Set content type. 
    Response.ContentType = "image/png"; 
    } 
} 

пример из http://www.dotnetperls.com/response-binarywrite

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