如何使用 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.r
是 requests.session()
的赋值
我明白了为什么它不起作用。
通过让 requests
处理 content-type
header 解决了这个问题。
multipart 字段中 name
变量的值是无关紧要的,您可以将其称为 file1
、file_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>
我正在尝试 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.r
是 requests.session()
我明白了为什么它不起作用。
通过让 requests
处理 content-type
header 解决了这个问题。
multipart 字段中 name
变量的值是无关紧要的,您可以将其称为 file1
、file_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
获取文件夹 IDhttps://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>