2011-12-21 27 views
3

HTML5とJavaScriptを使用してクライアントアプリケーションを構築しました。私のアプリケーションは、MySqlデータベースからBLOBデータを抽出し、それをクライアントアプリケーションに渡すWebサービス(C#を使用して構築)を呼び出します。BLOBを元のファイルタイプに戻してダウンロードできるようにする

このblobデータは、実際には、MySQLデータベースに格納された小さなファイル(100kb未満)です。クライアントアプリケーションでこのBLOBを元のファイルタイプに変換してから、ダウンロード権限があるかどうかを確認することができます。今私はこれが良いアイデアかどうか疑問に思っていましたか?または、単にWebサービスでファイル変換を行い、そのファイル自体をJSPアプリケーションに送信する必要がありますか?

ご協力いただきありがとうございます。そして、チュートリアル/コードがあれば、変換に役立つかもしれませんが、答えとしてここに投稿してください。前もって感謝します!

+1

あなたがこれまでどのようなコードを持っていないにSQLデータベースを変更... ?? – MethodMan

+0

私のWebサービスはただ今BLOBを渡しています...手元のすべてのオプションを判断したら正しく始めると思った – BurninatorDor

+0

ブロブをBLOBに戻すと言っていますか?または元のファイルタイプが何であるかをstatetdしていないのですか?明確にする必要があります – MethodMan

答えて

12

使用この例や、あなたのデータベースだけでなく、Selectステートメント

SqlConnection pubsConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=pubs;"); 
SqlCommand logoCMD = new SqlCommand("SELECT pub_id, logo FROM pub_info", pubsConn); 

FileStream fs;       // Writes the BLOB to a file (*.bmp). 
BinaryWriter bw;      // Streams the BLOB to the FileStream object. 

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

string pub_id = "";      // The publisher id to use in the file name. 

// Open the connection and read data into the DataReader. 
pubsConn.Open(); 
SqlDataReader myReader = logoCMD.ExecuteReader(CommandBehavior.SequentialAccess); 

while (myReader.Read()) 
{ 
    // Get the publisher id, which must occur before getting the logo. 
    pub_id = myReader.GetString(0); 

    // Create a file to hold the output. 
    fs = new FileStream("logo" + pub_id + ".bmp", FileMode.OpenOrCreate, FileAccess.Write); 
    bw = new BinaryWriter(fs); 

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

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

    // Continue reading and writing while there are bytes beyond the size of the buffer. 
    while (retval == bufferSize) 
    { 
    bw.Write(outbyte); 
    bw.Flush(); 

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

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

    // Close the output file. 
    bw.Close(); 
    fs.Close(); 
} 

// Close the reader and the connection. 
myReader.Close(); 
pubsConn.Close(); 
+5

私はこれが働いたと仮定..?私はものが一緒に来て、仕事をするのが大好きです。私が助けることができてうれしい – MethodMan

+1

非常にいいです、ありがとう – k4yaman

+0

こんにちは@MethodMan私は何か似ていることを把握しようとしています。基本的に私は特定のファイルタイプをSQL blob(つまり.doc/.docx/pdf/jpeg ... 'など)に保存することができましたが、今度はボタンをクリックするだけでそれらを表示できる必要があります。これは私のニーズにとって同じように働くのだろうか?私はファイルタイプを指定する必要があるかどうか分からないが、これは問題を起こす可能性があります。ありがとう – bjjrolls

関連する問題