如何对图片进行编码解码以适配Hedera文件服务?
在Hedera文件服务存储图片的实操指南(面向编码新手)
核心逻辑先搞懂
Hedera文件服务本质是存储二进制数据,官方文档提UTF-8只是针对文本文件的场景——图片本身就是二进制格式,完全不需要用UTF-8编码,直接处理原始字节就行。
步骤1:把图片转成可上传的字节数据(编码)
不管你的图片是JPG、PNG还是其他格式,都可以直接以二进制模式读取成字节数组,这就是Hedera能接受的格式。
举两个常用语言的示例:
Python
# 以二进制模式读取图片,得到字节数组 with open("my_image.png", "rb") as img_file: image_bytes = img_file.read()
Java
import java.nio.file.Files; import java.nio.file.Paths; // 读取图片文件为字节数组 byte[] imageBytes = Files.readAllBytes(Paths.get("my_image.png"));
解释:
rb(Python)/ 直接读取字节(Java)是关键,这样拿到的是图片的原始二进制数据,没有任何编码破坏。
步骤2:上传字节数据到Hedera文件服务
用Hedera SDK的FileCreateTransaction接口,把刚才的字节数组传进去即可。下面是简化的示例(需要先初始化SDK客户端,基础配置省略):
Python
from hedera import FileCreateTransaction, Client, PrivateKey # 假设已初始化client和你的账户密钥 create_tx = FileCreateTransaction() .set_contents(image_bytes) .set_keys([your_private_key.public_key]) # 设置能操作文件的密钥 .freeze_with(client) # 签名并执行交易 create_tx_signed = create_tx.sign(your_private_key) create_tx_response = create_tx_signed.execute(client) # 获取文件ID,后续读取需要用 file_id = create_tx_response.get_receipt(client).file_id
Java
import com.hedera.hashgraph.sdk.*; // 假设已初始化client和账户密钥 FileCreateTransaction createTx = new FileCreateTransaction() .setContents(imageBytes) .setKeys(yourPublicKey) .freezeWith(client); // 签名并执行 TransactionResponse txResponse = createTx.sign(yourPrivateKey).execute(client); TransactionReceipt receipt = txResponse.getReceipt(client); FileId fileId = receipt.fileId;
注意:一定要设置
set_keys,否则后续你可能没有权限读取或修改这个文件。
步骤3:从Hedera读取并还原图片(解码)
用FileContentsQuery获取文件的字节数据,再以二进制模式写入本地文件即可还原图片:
Python
from hedera import FileContentsQuery # 查询文件内容 contents_query = FileContentsQuery() .set_file_id(file_id) .execute(client) # 把字节数据写入本地文件,还原图片 with open("restored_image.png", "wb") as output_file: output_file.write(contents_query.contents)
Java
import com.hedera.hashgraph.sdk.*; // 查询文件内容 FileContentsQuery contentsQuery = new FileContentsQuery() .setFileId(fileId) .execute(client); // 写入本地文件还原图片 Files.write(Paths.get("restored_image.png"), contentsQuery.contents);
解释:
wb(Python)/ 直接写入字节(Java)确保二进制数据不被篡改,完美还原图片。
关键注意事项
- 文件大小限制:Hedera文件服务单个文件最大支持1MB,如果你的图片超过这个大小,需要考虑分片存储,或者把图片上传到分布式存储后,将存储哈希存到Hedera文件服务中。
- 别碰UTF-8:图片是二进制数据,绝对不要尝试用UTF-8编码/解码,否则会破坏数据导致图片无法还原。
- 权限配置:创建文件时设置的密钥是唯一能操作该文件的凭证,务必妥善保存,避免丢失后无法访问文件。
内容的提问来源于stack exchange,提问作者samuelnihoul
相关产品推荐
相关产品推荐

