0

如何组织从服务器数据库下载的文件并在客户端计算机上打开它?

我的代码仅在服务器上打开页面时才有效:

        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);
4

2 回答 2

0

这在 Web 应用程序中是不可能的。
如果您想这样做,请编写一个 Windows 应用程序。

浏览器的安全限制不允许您从浏览器下载和直接运行 exe。
您可以在响应中发送 exe,用户在其中手动保存并运行它。

在您当前的设置中,exe 仍在服务器上编写和运行,无论请求是否来自。

WriteAllBytes顺便说一句,将字节数组写入文件更容易使用。您不必担心以这种方式锁定和处置对象。

File.WriteAllBytes(FileName, file);
于 2012-11-07T04:18:14.693 回答
0

感谢您的回答!我是这样做的:

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

其中:file - 它是二进制类型的参数。initFileName - 字符串类型文件名。只有 3 行)。

于 2012-11-07T09:42:00.373 回答