最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

c# - Converting blob back to original file type and making it available for download - Stack Overflow

programmeradmin0浏览0评论

So I have a client application built using HTML5 and JavaScript. My application invokes a web service (built using c#), which extracts a blob data from a MySql database and passes it on to the client application.

This blob data is actually a small file (less than 100kb) which was stored in the MySQL Database. I want my client application to be able to convert this blob back to its original file type and then ask the user for download permissions. Now I was wondering if this is a good idea or not? Or should I simply do the file conversion in my Web Service and then send the file itself to the JSP application?

Any help / suggestions will be highly appreciated! And if you have any good tutorials / codes, which might help me with the conversion then please post them here as an answer? Thanks in advance!

So I have a client application built using HTML5 and JavaScript. My application invokes a web service (built using c#), which extracts a blob data from a MySql database and passes it on to the client application.

This blob data is actually a small file (less than 100kb) which was stored in the MySQL Database. I want my client application to be able to convert this blob back to its original file type and then ask the user for download permissions. Now I was wondering if this is a good idea or not? Or should I simply do the file conversion in my Web Service and then send the file itself to the JSP application?

Any help / suggestions will be highly appreciated! And if you have any good tutorials / codes, which might help me with the conversion then please post them here as an answer? Thanks in advance!

Share Improve this question edited Jun 8, 2022 at 21:13 BurninatorDor asked Dec 21, 2011 at 15:46 BurninatorDorBurninatorDor 1,1175 gold badges20 silver badges42 bronze badges 8
  • 1 what code do you have thus far...?? – MethodMan Commented Dec 21, 2011 at 15:47
  • My web service just passes the blob for now...I figured I would start properly once I judge all the options in hand – BurninatorDor Commented Dec 21, 2011 at 15:51
  • Are you saying convert a blob back to a blob..? or have you not statetd what it's original file type is..?? just need clarification – MethodMan Commented Dec 21, 2011 at 15:54
  • 1 Either way that you do it you would have to do some Streaming I would be a little bit bias in some regards and say client side but what if while streaming you run into errors so Perhaps the webservice or an additional web method could Stream the Blob back as a .pdf.. that's kind of an open ended question it's your call.. I am sure others will chime in soon with their suggestions you would most likely read the info from the database into a byte[] and stream it back to a file – MethodMan Commented Dec 21, 2011 at 16:05
  • 2 this link will probably help you do it the best.. msdn.microsoft.com/en-us/library/87z0hy49(VS.71).aspx – MethodMan Commented Dec 21, 2011 at 16:17
 |  Show 3 more comments

1 Answer 1

Reset to default 14

use this example and change the SQL database to your Database as well as the Select Statement

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();
发布评论

评论列表(0)

  1. 暂无评论