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
1 Answer
Reset to default 14use 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();