如何使用 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
之前。
假设我的 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
之前。