You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对图片进行编码解码以适配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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:12:38