为了账号安全,请及时绑定邮箱和手机立即绑定

由于“源丢失”而无法打开 base64 解码的“.jpg”图像?

由于“源丢失”而无法打开 base64 解码的“.jpg”图像?

斯蒂芬大帝 2021-12-21 16:04:58
我正在尝试.jpg使用requestdjango 服务器端发送文件并尝试对其进行解码。代码:这是发送方代码:import requestsimport osimport base64fPath = os.getcwd()url = 'http://127.0.0.1:8000/submitcausedata/'headers = {'content-type': 'application/x-www-form-urlencoded'}path_img = fPath + '/image13.jpg'data = open(path_img,'rb').read()encoded_image = base64.encodestring(data)   print(encoded_image[:10])r = requests.post(url,data=encoded_image,headers=headers)   在接收端代码:@csrf_exemptdef submitCauseData(request):       response_data = {}      if request.method == 'POST':        data = request.POST             myDict = dict(data)             imageStr = list(myDict.keys())              imageStr = imageStr[0]        print(imageStr[:10])        image_result = open('image.jpg', 'wb')               image_result.write(base64.b64decode(imageStr))        return HttpResponse("Page Exists")      所以,代码正在执行,但是当我尝试打开保存的图像时,它显示错误Photo Source File missing?发送代码输出:print(encoded_image[:10])----> b'/9j/4WQYRX'接收端代码输出:print(imageStr[:10])----> /9j/4WQYRX更新:.jpg使用.txt转换比较两个文件时,使用DiffCheckerOnline比较它们中的许多值是不同的。Ubuntu 上的图像查看器在打开.jpg接收端时显示错误:Error interpreting JPEG image file (Unsupported marker type 0x10)还:在发送端:print(len(data))print(type(data))print(len(encoded_image))print(type(encoded_image))OUTPUT:171062<class 'bytes'>228084<class 'bytes'>在接收端:print(len(imageStr))print(type(imageStr))print(len(imagedec))print(type(imagedec))OUTPUT:228083<class 'str'>168972<class 'bytes'>
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

我发现了错误,当我尝试发送的class的byte从发送方的字符串,会发生什么情况是所有的'+',并'='得到转化为' '接收侧。


因此,通过使用:


发送方:


import requests

import os

import base64

fPath = os.getcwd()

url = 'http://127.0.0.1:8000/submitcausedata/'

headers = {'content-type': 'application/x-www-form-urlencoded'}

path_img = fPath + '/image13.jpg'

data = open(path_img,'rb').read()

encoded_image = base64.b64encode(data)  

r = requests.post(url,data=encoded_image,headers=headers)       

接收方:


@csrf_exempt

def submitCauseData(request):   

    response_data = {}      

    if request.method == 'POST':

        data = request.POST     

        myDict = dict(data)     

        imageStr = list(myDict.keys())      

        image = imageStr[0].replace(' ','+')

        image = image.encode() + b'==='                             

        imagedec = base64.b64decode(image)

        fPath = os.getcwd()     

        image_result = open(fPath + '/image.jpg', 'wb')

        image_result.write(imagedec)

        image_result.close()            

        return HttpResponse("HELLO")        

我解决了错误。


无论如何,感谢您的帮助@waket-zheng:)


查看完整回答
反对 回复 2021-12-21
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

下面的代码有效吗?


发送


from base64 import b64encode

from pathlib import Path


import requests



url = "http://127.0.0.1:8000/submitcausedata/"

headers = {"content-type": "application/x-www-form-urlencoded"}

encoded_image = b64encode(Path("image13.jpg").read_bytes())

print(encoded_image[:10])

r = requests.post(url, data=encoded_image, headers=headers)

接收


from base64 import b64decode

from pathlib import Path    


@csrf_exempt

def submitCauseData(request):

    response_data = {}

    if request.method == "POST":

        imageStr = list(dict(request.POST).keys())[0]

        print(imageStr[:10])

        p = Path("image.jpg")

        p.write_bytes(b64decode(imageStr))

        return HttpResponse(f"Saved image to `{p.resolve()}`")


查看完整回答
反对 回复 2021-12-21
  • 2 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信