2011-02-12 4 views
0

Je suis coincé avec le chargement swf sur mon aspx. Je suis supposé récupérer le swf de la base de données et l'afficher sur la page. Mon code parvient à créer le swf sur le dossier local après la récupération de db ... mais je n'arrive pas à l'afficher automatiquement sur l'aspx après le téléchargement ... et quel devrait être le code dans l'aspx? ... tout gars idées? ... thx ...Charger le fichier SWF dans ASP.NET

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) { } 
} 

Répondre

0

la lecture du contenu d'un FILESTREAM avec SqlDataReader est inefficace, même lors de l'utilisation CommandBevavior.SequentialAccess. Vous effectuez une copie avec tampon, mais pensez à utiliser Stream.CopyTo à la place. Déclarer un flux sur un SqlDataReader est trivial, voir Download and Upload images from SQL Server via ASP.Net MVC pour un exemple de code de faire juste cela. Cependant, dans l'ensemble, avec BLobs FILESTREAM, il vaut beaucoup mieux utiliser SqlFileStream, spécialement pour les gros volumes. Voir FILESTREAM MVC: Download and Upload images from SQL Server pour un exemple complet, y compris le téléchargement et le téléchargement de gros BLOB via ASP.Net.

En note, lire dans un fichier juste pour retourner ce fichier temporaire peut être assez cher, selon la fréquence d'accès.

0

Pour afficher un fichier SWF dans une page, vous avez besoin d'un objet Flash pour le charger. Vous devez ensuite pointer l'objet flash vers un gestionnaire ASHX qui récupère le fichier de la base de données et le renvoie.

+0

yup ... la méthode ASHX fonctionne et j'ai modifié le code en utilisant SqlFileStream comme suggéré par @Remus ... thx les gars pour toute l'aide .... – user614454

Questions connexes