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

如何在Python中打开图片用于Imgur API POST上传请求

问题排查与解决方案

根因定位

你遇到的FileNotFoundError核心原因是相对路径的参考基准是运行脚本时的当前工作目录,而非脚本文件本身的存储目录:

  • 如果你在非python_files目录下执行脚本,你写的../media/test.jpg会基于你执行命令的目录向上回溯,自然找不到目标文件
  • 你后续把图片放到脚本同级目录仍然失败,也是同样的工作目录匹配问题

修正方案

1. 基于脚本自身位置构造绝对路径

使用os模块自动获取脚本所在的绝对路径,再拼接目标文件路径,完全规避工作目录不一致的问题:

import os
from base64 import b64encode
import requests
import config

# 获取当前脚本所在目录的绝对路径
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
# 拼接图片绝对路径:脚本目录上级 → media目录 → test.jpg
IMG_PATH = os.path.join(SCRIPT_DIR, '..', 'media', 'test.jpg')

client_id = config.IMGUR_CLIENT_ID
headers = {"Authorization": f'Client-ID {client_id}'}
api_key = config.IMGUR_CLIENT_SECRET
url = "https://api.imgur.com/3/upload.json"

# 用with上下文管理器自动关闭文件,同时修正base64编码逻辑
with open(IMG_PATH, 'rb') as f:
    img_data = b64encode(f.read()).decode('utf-8')

j1 = requests.post(
    url, 
    headers = headers,
    data = {
        'key': api_key, 
        'image': img_data,
        'type': 'base64',
        'name': 'test.jpg',
        'title': 'Picture no. 1'
    }
)

2. 额外修正点

你原代码中还存在参数不匹配问题:

  • 你设置了'type': 'base64',但之前直接传递了图片原始二进制数据,没有转base64编码、也没有转成字符串格式,即使路径正确也会上传失败,修正后的代码已经补全了这部分逻辑。
  • 如果后续你把图片放到脚本同级的python_files目录,只需要把IMG_PATH改成os.path.join(SCRIPT_DIR, 'test.jpg')即可。

验证方法

你可以在代码中加一行打印确认路径是否正确:

print(f"图片实际查找路径:{os.path.abspath(IMG_PATH)}")

运行后对比输出的路径和你本地test.jpg的实际存储路径是否一致即可快速验证。

内容的提问来源于stack exchange,提问作者kevin lowenhaupt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:08