2011-02-12 60 views
0

我坚持在我的aspx中加载swf。我应该从数据库检索瑞士法郎,并显示在网页上。我的代码设法在从数据库中检索后在本地文件夹中创建swf ...但是我似乎无法在下载后自动在aspx上显示它...以及aspx中的代码应该是什么?任何想法家伙?... ... THX在ASP.NET中加载SWF文件

public string swfFileName = ""; 


protected void Page_Load(object sender, EventArgs e) 
{ 
    string swfToDbConnStr = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString; 
    try 
    { 

     using (SqlConnection connection = new SqlConnection(swfToDbConnStr)) 
     { 
      // Assumes that connection is a valid SqlConnection object. 
      SqlCommand command = new SqlCommand(
       "SELECT gameStorage FROM eGame", connection); 

      // Writes the BLOB to a file (*.swf). 
      FileStream stream; 
      // Streams the BLOB to the FileStream object. 
      BinaryWriter writer; 

      // Size of the BLOB buffer. 
      int bufferSize = 100; 
      // The BLOB byte[] buffer to be filled by GetBytes. 
      byte[] outByte = new byte[bufferSize]; 
      // The bytes returned from GetBytes. 
      long retval; 
      // The starting position in the BLOB output. 
      long startIndex = 0; 



      // Open the connection and read data into the DataReader. 
      connection.Open(); 
      SqlDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess); 

      while (reader.Read()) 
      { 


       // Create a file to hold the output. 
       stream = new FileStream(
        //"logo" + pubID + ".swf", FileMode.OpenOrCreate, FileAccess.Write); 
       "FBIS" + ".swf", FileMode.OpenOrCreate, FileAccess.Write); 
       writer = new BinaryWriter(stream); 

       // Reset the starting byte for the new BLOB. 
       startIndex = 0; 

       // Read bytes into outByte[] and retain the number of bytes returned. 
       retval = reader.GetBytes(0, startIndex, outByte, 0, bufferSize); 




       // Continue while there are bytes beyond the size of the buffer. 
       while (retval == bufferSize) 
       { 

        writer.Write(outByte); 
        writer.Flush(); 

        // Reposition start index to end of last buffer and fill buffer. 
        startIndex += bufferSize; 
        retval = reader.GetBytes(0, startIndex, outByte, 0, bufferSize); 
       } 

       // Write the remaining buffer. 
       writer.Write(outByte, 0, (int)retval - 1); 
       writer.Flush(); 

       // Close the output file. 
       writer.Close(); 
       stream.Close(); 

      } 

      // Close the reader and the connection. 
      reader.Close(); 
      connection.Close(); 
      swfFileName = Directory.GetCurrentDirectory(); 







     } 
    } 
    catch (Exception exs) { } 
} 

回答

0

读一FILESTREAM的内容与SqlDataReader是低效的,使用CommandBevavior.SequentialAccess时也是如此。您正在执行缓冲副本,但请考虑使用Stream.CopyTo。通过SqlDataReader声明一个流是很简单的,参见Download and Upload images from SQL Server via ASP.Net MVC了解这样做的示例代码。

总体而言,使用FILESTREAM blob,仅使用SqlFileStream尤其适用于大型内容。有关完整示例,请参阅FILESTREAM MVC: Download and Upload images from SQL Server,其中包括通过ASP.Net下载和上传大型BLOB。

作为一个提示,为了返回此临时文件而读入文件可能会非常昂贵,具体取决于访问频率。

0

要在页面中显示SWF文件,您需要一个flash对象来加载它。然后,您应该将flash对象指向ASHX处理程序,该处理程序将从数据库获取文件并将其返回。

+0

yup ... ASHX方法的工作原理和我使用@Remus建议的SqlFileStream修改代码... thx家伙的所有帮助.... – user614454 2011-02-17 15:39:12