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

Python 2.7:从SFTP站点URL写入指定目录时遇权限错误

解决SFTP API写入文件时的权限错误问题

嘿,我来帮你排查这个权限错误的问题!从你给出的代码和描述来看,咱们可以从以下几个方向入手解决:

1. 先确认账号的API权限配置

首先要排除最基础的权限问题:你的username:password账号是否拥有目标目录Source_Directory的写入权限?很多SFTP类的API会给账号设置细粒度的目录权限,可能你的账号只能读取这个目录,没法写入。

你可以先用curl命令行快速测试一下写入操作,验证权限是否正常:

curl -u username:password -X PUT -T "你的本地测试文件.txt" "https://sftp.mmm.com:443/api/v1.1/files/Source_Directory/测试上传文件.txt"

如果命令行也返回权限错误,那直接联系站点管理员调整账号权限就好。

2. 检查代码的请求方式是否正确

看你当前的代码,其实只是用GET请求获取了目录的内容(没有设置上传相关的选项),并没有执行写入文件的操作。要上传文件,得调整pycurl的配置,匹配API要求的上传方式。

比如如果API支持PUT上传,你可以用这段代码试试:

import pycurl
import os
from io import BytesIO

# 配置本地文件和远程路径
local_file = "/path/to/你的本地文件.txt"
remote_upload_url = "https://sftp.mmm.com:443/api/v1.1/files/Source_Directory/上传后的文件名.txt"

c = pycurl.Curl()
try:
    # 打开本地文件用于读取
    with open(local_file, 'rb') as file_obj:
        c.setopt(c.URL, remote_upload_url)
        c.setopt(c.USERPWD, "username:password")
        # 开启上传模式
        c.setopt(c.UPLOAD, 1)
        # 指定要上传的文件对象
        c.setopt(c.READDATA, file_obj)
        # 可选:设置文件大小,部分API需要这个参数
        c.setopt(c.INFILESIZE, os.path.getsize(local_file))
        
        c.perform()
        # 打印响应状态码,方便排查
        print(f"上传请求完成,HTTP状态码: {c.getinfo(c.RESPONSE_CODE)}")
except pycurl.error as e:
    print(f"上传失败,错误信息: {e}")
finally:
    c.close()

注意:有些API可能要求用POST请求并以multipart/form-data格式上传,你需要对照该站点的API文档确认正确的上传方式。

3. 排查其他可能的问题

  • 本地文件权限:确保运行代码的用户能读取你要上传的本地文件,虽然这是本地权限问题,但也可能导致上传失败。
  • 远程路径正确性:确认Source_Directory的路径拼写无误,有些API要求使用绝对路径(比如/files/完整路径/Source_Directory/),路径错误也可能返回类似权限错误的提示。

内容的提问来源于stack exchange,提问作者Matthew Mayo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:40:49