将 blob 转换回原始文件类型并使其可供下载 [英] Converting blob back to original file type and making it available for download

查看:26
本文介绍了将 blob 转换回原始文件类型并使其可供下载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我有一个使用 HTML5 和 JavaScript 构建的客户端应用程序.我的应用程序调用 Web 服务(使用 c# 构建),该服务从 MySql 数据库中提取 blob 数据并将其传递给客户端应用程序.

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.

这个blob数据实际上是一个存储在MySQL数据库中的小文件(小于100kb).我希望我的客户端应用程序能够将此 blob 转换回其原始文件类型,然后向用户请求下载权限.现在我想知道这是否是一个好主意?或者我应该简单地在我的 Web 服务中进行文件转换,然后将文件本身发送到 JSP 应用程序?

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!

推荐答案

使用此示例并将 SQL 数据库更改为您的数据库以及 Select 语句

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();

这篇关于将 blob 转换回原始文件类型并使其可供下载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆