手机浏览器浏览blob文件流(xlsx)

手机浏览器浏览blob文件流(xlsx),第1张

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类型的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9826610.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存