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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:33:35