3

所以我正在执行的过程对我来说似乎是合乎逻辑的,但我不断收到错误。所以我有这个二进制文件我试图发送到服务器(确切地说是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 编码的。它是否可能仅包含其他未编码的字符或类似的字符?

4

2 回答 2

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())}
)
于 2013-09-06T20:45:09.700 回答
1

如果您只是想将文件发送到您的服务器,则不需要对其进行 urlencode。使用 POST 请求发送它。

你可以使用 urllib2 或者你可以使用requests 库,这可以简化一些事情。

这个SO 线程也可以帮助你。

于 2013-09-06T20:55:27.373 回答