blob数据转为下载链接

createObjectURL我用过,window.navigator.msSaveOrOpenBlob还没用过。记一下.

聊天群【前端苞米地-2号地】的记录:

用save-file包吧 
或者直接使用createObjectURL
https://developer.mozilla.org/zh-CN/docs/Web/API/URL/createObjectURL
const blob = data
const url = window.URL // || window.webkitURL || window.moxURL
// 创建下载链接
const downloadHref = url.createObjectURL(blob)

let fileName = 'xxx'
let link = document.createElement('a');
link.download = fileName;
link.style.display = 'none';
link.href = downloadHref
document.body.appendChild(link);
link.click();
URL.revokeObjectURL(link.href); // 释放URL 对象
document.body.removeChild(link);

请求时候 responseType: ‘blob’

createObjectURL不支持IE11
ie11 可以用  window.navigator.msSaveOrOpenBlob
<think>好的,我需要回答用户关于如何在Java中将String转换为Blob的问题。首先,我得回忆一下Java中处理Blob的相关知识。Blob在Java中通常用于表示二进制对象,比如数据库中的BLOB类型字段。用户提到他们想将String转为Blob,所以可能需要处理数据库存储或二进制数据转换。 首先,我需要确认Java中Blob的用法。记得Blob是一个接口,通常通过数据库连接来创建。例如,使用java.sql.Blob,但直接实例化可能不太行,得通过数据库连接的方法,比如Connection.createBlob()。另外,可能还需要处理字符到字节的转换,因为String是字符数据,而Blob存储的是二进制数据。所以步骤应该是将String转为字节数组,再通过Blob接口写入。 然后,我需要考虑不同的场景。比如,如果用户使用JDBC,可能需要使用PreparedStatement的setBlob方法,这时候可能需要将String转为字节数组,再通过Blob对象设置。或者,如果使用Hibernate或JPA,可能有不同的方式,比如使用@Lob注解或者自定义转换器,但用户的问题更偏向于基础JDBC操作。 接下来,我需要检查是否有相关的代码示例。比如,使用Connection.createBlob()方法,然后获取输出流写入数据。或者,可能通过字节数组直接创建Blob,但需要注意字符编码,比如UTF-8。另外,用户提供的引用中有提到JPA转换器的例子,引用[3]中的JpaConverterJson,可能和属性转换有关,但用户的问题是关于String到Blob,所以可能需要调整思路。 还要注意异常处理,比如SQLException,以及资源管理,比如关闭流。代码示例中应该包含这些部分以确保正确性。此外,可能要考虑不同Java版本的变化,比如旧的String构造函数可能已弃用,需要使用Charset类的方法,如getBytes(StandardCharsets.UTF_8)。 现在需要综合这些信息,写出步骤清晰的示例代码。首先获取数据库连接,创建Blob对象,写入字节数据,然后处理异常。如果用户没有数据库连接,可能需要使用其他方法,比如使用序列化或第三方库,但标准做法应该是通过JDBC的Blob接口。 最后,确保代码正确使用try-with-resources来管理资源,避免内存泄漏。同时,提醒用户注意字符编码的一致性,避免乱码问题。可能还需要提到Blob数据库中的实际应用场景,比如存储文本或二进制数据。</think>### Java中将String转换为Blob的步骤及示例 在Java中将String转换为Blob通常用于将文本数据存储为数据库中的二进制对象(BLOB类型)。以下是具体实现方法: --- #### **步骤说明** 1. **字符串转字节数组** 使用`getBytes()`方法将字符串按指定编码(如UTF-8)转换为字节数组,确保二进制数据的正确性。 2. **创建Blob对象** 通过JDBC的`Connection.createBlob()`方法创建空的Blob对象,然后通过输出流写入数据。 3. **处理异常和资源** 使用`try-with-resources`或手动关闭流,避免资源泄漏。 --- #### **代码示例** ```java import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.nio.charset.StandardCharsets; public class StringToBlobExample { public static void main(String[] args) { // 假设已配置数据库连接 String url = "jdbc:mysql://localhost:3306/mydb"; String user = "root"; String password = "password"; try (Connection conn = DriverManager.getConnection(url, user, password)) { String text = "需要存储的文本内容"; // 1. 字符串转字节数组(指定编码) byte[] bytes = text.getBytes(StandardCharsets.UTF_8); // 2. 创建Blob对象并写入数据 Blob blob = conn.createBlob(); try (OutputStream outputStream = blob.setBinaryStream(1)) { outputStream.write(bytes); } // 3.Blob存入数据库(示例) String sql = "INSERT INTO my_table (blob_column) VALUES (?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setBlob(1, blob); pstmt.executeUpdate(); } } catch (SQLException e) { e.printStackTrace(); } } } ``` --- #### **关键点说明** - **字符编码一致性**:转换时必须明确指定编码(如`StandardCharsets.UTF_8`),否则可能因平台默认编码不同导致数据损坏[^3]。 - **Blob生命周期**:Blob对象通常与数据库连接绑定,需确保在连接未关闭前完成操作[^1]。 - **替代方案**:若未使用JDBC,可通过`ByteArrayInputStream`直接处理二进制数据,但需与具体数据库驱动兼容。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值