如何使用 urlfetch post 静态文件?

How to post static file with urlfetch?

假设我的 app.yaml 中有以下处理程序:

handlers:
- url: /img/
  static_dir: templates/img

并且 templates/img 文件夹包含文件 0001.jpg

以下代码用于POST数据:

parameters = {'parm1': 'value1', 
    'parm2': 'value2'}
parameters = urllib.urlencode(parameters)
response = urlfetch.Fetch(url, payload=parameters, method=urlfetch.POST, deadline=60)

我应该如何将该文件添加到 urlfetch

默认情况下,应用程序无法访问 App Engine 中的静态文件。正如 the docs 解释的那样,"Static files are not available in the application's file system".

如果您需要静态提供一个文件 并且 可由应用程序读取,您可以将 application_readable: true 添加到 static_dir 处理程序节。

但是,如果您这样做,再次根据文档,文件将被上传两次(到您的应用程序的文件系统和提供静态文件的单独文件系统),并且 "Both uploads are charged against your code and static data storage resource quotas".

如果这样做,您的应用程序代码(假设它位于 templates 的子目录的顶级目录中)将能够访问您提到的文件(仅供阅读)在给定的路径:

path = os.path.join(os.path.dirname(__file__), 'templates/img/0001.jpg')

即便如此,我也不知道您所说的 "add that file to urlfetch" 是什么意思。 urlfetch.Fetch 不接受文件参数。如果您打算将文件的内容添加到 payload,那么大概您只需将它添加一个条目(使用您要使用的名称,并将文件的字节作为值)添加到您正在进行 urlencoding 的字典中为此目的,例如

with open(path, 'rb') as f:
    parameters['data'] = f.read()

就在调用 urlencode 之前。