所以我正在执行的过程对我来说似乎有道理,但我一直都会遇到错误。所以我有这个二进制文件,我正在尝试发送到服务器(Shapeways确切。它是一个二进制的3D模型文件)所以我通过这个过程使其在URL中可以接受
theFile = open(fileloc,'rb')
contents = theFile.read()
b64 = base64.urlsafe_b64encode(contents)
url = urllib.urlencode(b64) # error
问题是最后一行总是抛出错误
TypeError: not a valid non-string sequence or mapping object
这对我来说没有意义,因为数据被假设为URL编码。是否有可能只包含其他未编码的字符或类似的字符?
答案 0 :(得分:2)
urllib.urlencode将一系列两元素元组或字典序列化为一个URL查询字符串(它基本上摘自docstring),但您只是作为参数传递一个字符串。
你可以尝试这样的事情:
theFile = open(fileloc,'rb')
contents = theFile.read()
b64 = base64.urlsafe_b64encode(contents)
url = urllib.urlencode({'shape': b64})
但是你在url变量中得到的只是编码参数,所以你仍然需要实际的url。如果您不需要低级操作,最好使用requests库:
import requests
import base64
url = 'http://example.com'
r = requests.post(
url=url,
data={'shape':base64.urlsafe_b64encode(open(fileloc, 'rb').read())}
)
答案 1 :(得分:1)
如果您只是尝试将文件发送到服务器,则不需要对其进行urlencode。使用POST请求发送。
您可以使用urllib2,也可以使用requests lib,这可以简化一些事情。
This SO线程也可以为您提供帮助。