如何在AWS Fargate部署的IPFS Cluster中添加访问文件并对接Django后端?
将IPFS Cluster文件上传功能集成到Django后端
两种实现方案
方案一:调用系统CLI命令(快速落地)
直接在Django视图中通过subprocess执行原CLI命令,适合快速验证需求。
视图代码示例
import subprocess import os from django.http import HttpResponse def upload_to_ipfs_cluster(request): if request.method == 'POST' and request.FILES.get('file'): uploaded_file = request.FILES['file'] # 临时保存上传文件(可根据需求改用内存文件) temp_file_path = f"/tmp/{uploaded_file.name}" with open(temp_file_path, 'wb+') as dest: for chunk in uploaded_file.chunks(): dest.write(chunk) # 从环境变量加载集群配置 secret = os.environ.get('IPFS_CLUSTER_SECRET') basic_auth = os.environ.get('IPFS_CLUSTER_AUTH') # 格式为 LOGIN:PASSWORD cluster_addr = "/dns/d3a323gq69ki35.cloudfront.net/tcp/443" # 构造执行命令 cmd = [ 'ipfs-cluster-ctl', '-l', cluster_addr, '--secret', secret, '--basic-auth', basic_auth, 'add', temp_file_path ] try: # 执行命令并捕获输出 result = subprocess.run(cmd, capture_output=True, text=True, check=True) cid = result.stdout.strip().split()[-1] # 清理临时文件 os.remove(temp_file_path) return HttpResponse(f"文件上传成功,CID: {cid}") except subprocess.CalledProcessError as e: os.remove(temp_file_path) return HttpResponse(f"上传失败: {e.stderr}", status=500) return HttpResponse("请上传文件", status=400)
注意事项
- 确保服务器已安装
ipfs-cluster-ctl工具 - 用环境变量管理敏感信息(避免硬编码),可通过
python-dotenv加载 - 临时文件需及时清理,避免磁盘空间浪费
方案二:使用Python客户端库(推荐生产环境)
利用官方Python客户端ipfscluster直接调用API,无需依赖CLI工具,更可控、易维护。
步骤1:安装客户端库
pip install ipfscluster
视图代码示例
import os from ipfscluster import Cluster from django.http import HttpResponse from django.conf import settings def upload_to_ipfs_cluster(request): if request.method == 'POST' and request.FILES.get('file'): uploaded_file = request.FILES['file'] # 初始化集群客户端 cluster = Cluster( host=settings.IPFS_CLUSTER_HOST, port=settings.IPFS_CLUSTER_PORT, protocol='https', basic_auth=settings.IPFS_CLUSTER_AUTH, secret=settings.IPFS_CLUSTER_SECRET ) try: # 直接上传文件对象 upload_result = cluster.add(uploaded_file.file) cid = upload_result['cid']['/'] return HttpResponse(f"文件上传成功,CID: {cid}") except Exception as e: return HttpResponse(f"上传失败: {str(e)}", status=500) return HttpResponse("请上传文件", status=400)
配置参数到settings.py
将集群配置统一放到Django配置文件中,便于管理:
# settings.py IPFS_CLUSTER_HOST = 'd3a323gq69ki35.cloudfront.net' IPFS_CLUSTER_PORT = 443 IPFS_CLUSTER_AUTH = os.environ.get('IPFS_CLUSTER_AUTH') IPFS_CLUSTER_SECRET = os.environ.get('IPFS_CLUSTER_SECRET')
注意事项
- 大文件上传建议采用流式处理,避免内存溢出
- 生产环境需添加文件类型、大小校验逻辑
- 可封装上传逻辑为独立服务类,提升代码复用性
内容的提问来源于stack exchange,提问作者VIVEK T
相关产品推荐
相关产品推荐

