使用wordpressapi将数据作为图像上传到Wordpress

2024-04-26 06:54:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试获取图像的URL,下载它,然后使用wordpressapi将其上传到wordpress。这是我的密码:

def upload_media(self, media_url):
    # Get the last path component
    filename = media_url.split('/')[-1]
    response = requests.get(media_url)
    if response.status_code == 200:
        image = Image.open(BytesIO(response.content))
        upload_url = self.__upload_media_url()
        headers = { "Content-Disposition": f'attachment; filename={filename}'}
        files = { 'file': image.tobytes() }
        request = requests.post(upload_url, auth=(self.username, self.password), files=files, headers=headers)
        return request

每次失败时都会出现以下错误:

{'code': 'rest_upload_unknown_error', 'message': 'Sorry, this file type is not permitted for security reasons.', 'data': {'status': 500}}

最初我有以下代码,在我的本地机器上工作。但是,因为我想在Google云上运行这个函数,所以我没有访问文件系统的权限。因此,打开/关闭过程将不起作用。你知道吗

def upload_media(self, media_url):
    # Get the last path component
    filename = media_url.split('/')[-1]
    response = requests.get(media_url)
    if response.status_code == 200:
        with open(filename, 'wb') as file:
            file.write(response.content)
        upload_url = self.__upload_media_url()
        headers = { "Content-Disposition": f'attachment; filename={filename}'}
        files = { 'file': open(filename, 'rb')}
        request = requests.post(upload_url, auth=(self.username, self.password), files=files, headers=headers)
        os.remove(filename)
        return request

有办法吗?你知道吗


Tags: selfurlresponserequestdefstatuscodefiles
2条回答

最终我不得不对我原来的功能做了两个修改。你知道吗

  1. 添加Content-type: image/jpeg

  2. data=代替file=

以下是不需要打开/关闭任何文件的工作功能:

def upload_media(self, media_url):
    # Get the last path component
    filename = media_url.split('/')[-1]
    response = requests.get(media_url)
    if response.status_code == 200:
        upload_url = self.__upload_media_url()
        headers = { "Content-Disposition": f"attachment; filename={filename}" , "Content-Type": "image/jpeg" } 
        return requests.post(upload_url, auth=(self.username, self.password), headers=headers, data=response.content)

根据https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.tobytesimage.tobytes()生成原始图像数据,而不是PNG或JPG压缩数据-因此,您尝试上载的不是允许的类型之一。你知道吗

把这句话放下:

image = Image.open(BytesIO(response.content))

然后使用:

files = { 'file':  BytesIO(response.content) }

我相信这会解决你的问题。你知道吗

相关问题 更多 >