如何使用 Openload.co API 上传文件

How to Upload a file using Openload.co API

我正在尝试 upload a file 使用 Openload REST API 调用“240p.mp4”。

由于上传端点需要文件的 SHA-1 哈希值,我通过以下操作获得了它:

sha1 = hashlib.sha1()

BLOCKSIZE = 65536
with open('240p.mp4', 'rb') as afile:
    buf = afile.read(BLOCKSIZE)
    while len(buf) > 0:
        sha1.update(buf)
        buf = afile.read(BLOCKSIZE)

sha1_hash = sha1.hexdigest()

所以我请求上传 link:

url = "https://api.openload.co/1/file/ul?login={login}&key={key}&sha1={sha1}".format(
    login='YOUR_LOGIN',
    key='YOUR_API_KEY',
    sha1=sha1_hash,
)

p = {
    'url': url,
    'headers': {
        'User-Agent': self.ua,
    }
}
r = self.r.get(url=p['url'], headers=p['headers'])
j = r.json()

upload_link = j['result']['url']

他们建议制作一个 CURL 但我更像是一个 requests 人 ^^

curl -F file1=@/path/to/file.txt https://13abc37.example.com/ul/jAZUhVzeU78

所以我尝试用 POST 请求复制它:

p = {
    'url': upload_link,
    'headers': {
        'user-agent': self.ua,
        'Content-Type': 'multipart/form-data; boundary="xxx"',
    },
    'files': {
        'file1': open('/scripts/wordpress/240p.mp4', "rb"),
      # I've also tried this (and some others)
      # 'file1': ('240.mp4', open('/scripts/wordpress/240p.mp4', "rb"), 'video/mp4')
    }
}
r = self.r.post(url=p['url'], headers=p['headers'], files=p['files'])

但是它returns这个错误响应:

r.content¬
{
    "status": 500,
    "msg": "failed to read: closed"
}

理论上,状态500错误是来自服务器的错误。但为什么我会收到此错误消息?

N1: 我明确设置了 boundary="xxx" 因为如果我不这样做。缺少的响应 returns。所以我设置了。

N2: 文件 /scripts/wordpress/240p.mp4 的路径是正确的。也有权限。

N3: 我知道远程上传功能,但我需要从二进制文件(我的意思是从本地)上传

N4: 很明显,但是 self.rrequests.session()

的赋值

我明白了为什么它不起作用。 通过让 requests 处理 content-typeheader 解决了这个问题。 multipart 字段中 name 变量的值是无关紧要的,您可以将其称为 file1file_upload 或其他名称。

这对我有用:

filepath = '/scripts/wordpress/240p.mp4'

sha1 = hashlib.sha1()

BLOCKSIZE = 65536
with open(filepath, 'rb') as afile:
    buf = afile.read(BLOCKSIZE)
    while len(buf) > 0:
        sha1.update(buf)
        buf = afile.read(BLOCKSIZE)

sha1_hash = sha1.hexdigest()

url = "https://api.openload.co/1/file/ul?login={login}&key={key}&sha1={sha1}".format(
    login='YOUR_LOGIN',
    key='YOUR_API_KEY',
    sha1=sha1_hash,
)

p = {
    'url': url,
    'headers': {
        'User-Agent': self.ua,
    }
}
r = self.r.get(url=p['url'], headers=p['headers'])
j = r.json()

upload_link = j['result']['url']

p = {
    'url': upload_link,
    'headers': {
        'user-agent': self.ua,
    },
    'files': {
        'file1': open(filepath, 'rb'),
    }
}
r = self.r.post(url=p['url'], headers=p['headers'], files=p['files'])

尝试使用此代码......使用 openload api.

上传文件

首先使用此 url

获取文件夹 ID

https://api.openload.co/1/file/listfolder?login=XXXXXXX&key=XXXX

获取文件夹 ID 后,将文件夹 ID、登录名、密钥添加到下面的代码中..就是这样。

<html>
  <form action="demo3.php"  method="post" enctype="multipart/form-data" >
   <input type="file" name="file">
   <input type="submit" name="submit" id="submit" value="upload">
  </form>

  <?php
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'https://api.openload.co/1/file/ul?login=XXXXXXXXX&key=XXXXXXX&folder=3994051');
   // Set so curl_exec returns the result instead of outputting it.
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   // Get the response and close the channel.
   $response = curl_exec($ch);
   $json=json_decode($response);
   $url=$json->result->url;

   curl_close($ch);
   if(isset($_FILES['file']['tmp_name']))
   {
    
    $ch1=curl_init();
    $cfile=new CURLFile($_FILES['file']['tmp_name'],$_FILES['file']['name']);
    $cfile->setPostFilename(basename($_FILES["file"]["name"]));
    $data=array("file"=>$cfile);
    curl_setopt($ch1, CURLOPT_URL, $url);
    curl_setopt($ch1, CURLOPT_POST, true);
    curl_setopt($ch1, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
    $response1=curl_exec($ch1);
    $json1=json_decode($response1);
    echo $json1->result->url;
    echo $response1;
    curl_close($ch1);
    #echo $json1;
   }
  ?>
</html>