
js 导出xlsx文件,以文件流形式传到前端,转化成blob类型,然后通过fileSaver转化成Excel文件,
一切看起来都很简单,用电脑浏览器导出的时候也很顺利,但是再用ipad导出的时候却出现空页面,用google浏览器,导出的时候甚至没有任何反应
原因就是这个blob的type是个空字符串,查一下MIME type,将这个type替换成对应的MIME type 即可正常导出
使用FileReader对象,web应用程序可以异步的读取存储在用户计算机上的文件(或者原始数据缓冲)内容,可以使用File对象或者Blob对象来指定所要处理的文件或数据
readAsBinaryString()
读取指定的Blob对象或File对象中的内容 当读取 *** 作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之同时,result属性中将包含所读取文件的原始二进制数据
什么是 BLOB?
BLOB 是二进制大对象(binary large object)的首字母缩写,是在 SQL Server 中作为一个单一实体存储的二进制数据集合。BLOB 主要用于保存多媒体对象,比如图像、视频和声音,但是它们还可以存储程序,甚至是代码片断。虽然 SQL Server 支持 BLOB,但不是所有数据都支持。
C#读取BLOB数据
有几种方法可以用来从 SQL Server 数据库读取数据。首先,你可以逐行读取数据;或者,你可以选择从特定列中读取数据。最简单的方法是访问特定的列,下面我们先讨论这种方法。
C#读取BLOB数据要求工作在字节级。幸运的是,SqlDataReader 对象有一个 GetBytes 方法用于以字节方式访问一个列的数据。一旦字节被读取,它们就可以与一个 FileStream 对象组合,以将 BLOB 对象保存到一个文件中。下面的 C#代码给出了这个例子:
1 Byte[] blob = null;
2 FileStream fs = null;
3 const string sConn = "server=(local);Initial
4 Catalog=Northwind;UID=ctester;PWD=password";
5 try {
6 SqlConnection conn = new SqlConnection(sConn);
7 SqlCommand cmd = new SqlCommand("SELECT Picture FROM Categories WHERE
8 CategoryName='Builder'", conn);
9 cnOpen();
10 SqlDataReader sdr = cmdExecuteReader();
11 sdrRead();
12
13 blob = new Byte[(sdrGetBytes(0, 0, null, 0, intMaxValue))];
14 sdrGetBytes[0, 0, blob, 0, blobLength);
15 sdrClose();
16 connClose();
17 fs = new FileStream("c:\\Builderdoc", FileModeCreate, FileAccessWrite);
18
19 fsWrite(blob, 0, blobLength);
20 fsClose();
21 } catch (SqlException e){
22 ConsoleWriteLine("SQL Exception: " + eMessage);
23 } catch (Exception e) {
24 ConsoleWriteLine("Exception: "+ eMessage);
25 }
如何通过javascript向sqlite存储blob数据
SVN是C/S架构,数据存放分成服务器端和客户端。创建代码库一般指的是SVN服务器端的 *** 作,这个库随便建在什么地方都可以;你要发布的线上代码,这是存放在SVN的客户端的。 SVN的服务器端和客户端存放文件的格式是不同的,所以不能直接访问SVN服务
如果你的 *** 作系统是windows,建议使用ToitorseSVN客户端,在我的百度文库里有在windows环境下使用SVN的培训PPT。
Blob数据类型的使用:
blob{200} bl_var // 定义一个初始大小为200字节blob
blob bl_var // 普通定义方法,零长度blob
bl_var = Blob(Space(200)) // 动态分配200个字节,实际上是分配了一个200字符的字符串,全部为空格(ASCII码20H),最后转换为blob。也就是开辟了一个200字节的内存区,内容都是20H,而不是00H。全部初始化为全零的变通方法:(DX有更直接方法吗?)
blob bl_var
bl_var = Blob(Space(200))
for i = 1 to Len(bl_var)
BlobEdit(bl_var, i, Char(0))
next
// BlobEdit()用于修改一个blob变量指定位置的值,修改值可以是任何类型(转换到blob字节)。
但是有个奇特的地方,PB会把char看作string,当写入了一个非零的字符(char)时,字符串以零字符结束,因此实际上修改了blob变量的两个字节(一个是字符本身,一个是零字节),解决方法是Blob(some_char),因为用Blob来转换字符串时,只有有效字符被转换,结尾的零字符会被忽略。而Blob(Char(0))将会返回一个空值,因为PB把char(0)作为零长度的字符串处理。
当修改值超出blob变量的范围时,该次修改将不起作用!
// 对blob变量作逐字节处理的方法:
// bl_source已经初始化,i是要处理的字节位置
blob{1} bl_byte // 声明单字节长度的blob
int li_byte
bl_byte = BlobMid (bl_source, i, 1) // Extract a byte
li_byte = Asc(String(bl_byte)) // 转换到整型
// 对li_byte的值作任意处理,处于0-255单字节取值范围内
// 字节内容处理后再放回去
if li_byte = 0 then
BlobEdit(bl_source, i, Char(0)) // 写入00H
else
BlobEdit(bl_source, i, Blob(Char(li_byte)))
如果还有什么不懂的地方,可以搜索编程回忆录,现在他们也开始录制了这方面的教程, 我觉得这个课程很不错,零基础开始,由浅入深,容易学。
在OracleQueryBean类中增加一个函数,来进行读取,具体代码如下:
/
根据在数据库中的ID进行读取
@param strID 字段ID
@param w 需要缩到的宽度
@param h 需要缩到高度
@return
/
public byte[] GetImgByteById(String strID, int w, int h){
//Systemoutprintln("Get img data which id is " + nID);
if(myConnection == null)
thisgetConnection();
byte[] data = null;
try {
Statement stmt = myConnectioncreateStatement();
ResultSet myResultSet = stmtexecuteQuery("select " + thisstrIDName + " from " + thisstrTabName + " where " + thisstrIDName + "=" + strID);
StringBuffer myStringBuffer = new StringBuffer();
if (myResultSetnext()) {
javasqlBlob blob = myResultSetgetBlob(thisstrImgName);
InputStream inStream = blobgetBinaryStream();
try {
long nLen = bloblength();
int nSize = (int) nLen;
//Systemoutprintln("img data size is :" + nSize);
data = new byte[nSize];
inStreamread(data);
inStreamclose();
} catch (IOException e) {
Systemoutprintln("获取数据失败,原因:" + egetMessage());
}
data = ChangeImgSize(data, w, h);
}
Systemoutprintln(myStringBuffertoString());
myConnectioncommit();
myConnectionclose();
} catch (SQLException ex) {
Systemoutprintln(exgetMessage());
}
return data;
}
页面使用OracleQueryBean来根据用户提供的id进行查询,在读取并进行缩放后,通过jsp页面进行展示,具体代码如下:
<%@ page language="java" contentType="text/html;;charset=gbk" %>
<jsp:useBean id="OrcleQuery" scope="page" class="HLFtiDemoOracleQueryBean" />
<%
responsesetContentType("image/jpeg");
//在数据库中的 ID
String strID = requestgetParameter("id");
//要缩略或放大的宽度
String strWidth = requestgetParameter("w");
//要缩略或放大的高度
String strHeight = requestgetParameter("h");
byte[] data = null;
if(strID != null){
int nWith = IntegerparseInt(strWidth);
int nHeight = IntegerparseInt(strHeight);
//获取的byte数据
data = OrcleQueryGetImgByteById(strID, nWith, nHeight);
ServletOutputStream op = responsegetOutputStream();
opwrite(data, 0, datalength);
opclose();
op = null;
responseflushBuffer();
//清除输出流,防止释放时被捕获异常
outclear();
out = pageContextpushBody();
}
%>
以上就是关于手机浏览器浏览blob文件流(xlsx)全部的内容,包括:手机浏览器浏览blob文件流(xlsx)、JS 怎么读取二进制文件、C#中如何读取blob类型的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)