По умолчанию статические файлы в App Engine: не, доступный приложению. Как the docs объясните: «Статические файлы недоступны в файловой системе приложения».
Если вам нужен файл, чтобы быть как служил статический и считываемого приложением, вы можете добавить application_readable: true
к static_dir
обработчика строфе.
Однако, если вы сделаете это, снова за документ, файлы будут загружены дважды (в файловую систему вашего приложения и в отдельный, из которых будут загружены статические файлы), и «Обе загрузки загружаются с вашего кода и статические квоты ресурсов хранения данных ".
Если вы это сделаете, ваш код приложения (при условии, что он находится в каталоге верхнего уровня, из которого templates
является поддиректорией) сможет получить доступ к файлу, который вы указываете (только для чтения) по пути, указанному :
path = os.path.join(os.path.dirname(__file__), 'templates/img/0001.jpg')
Даже тогда, я не знаю, что вы подразумеваете под «добавлением этого файла в urlfetch». urlfetch.Fetch
не принимает аргумент файла. Если вы хотите добавить содержимое файла в payload
, то предположительно вы просто добавите в него запись (с именем, которое вы хотите использовать, и байтами файла в качестве значения) в словарь, который вы используете для этой цели, например
with open(path, 'rb') as f:
parameters['data'] = f.read()
как раз перед вызовом urlencode
.
Спасибо. Да, я хочу имитировать загрузку файлов, поэтому содержимое файла должно быть добавлено в «полезную нагрузку». Но ваш подход не работает - я проверил, что отправляет локальный сервер - он не генерирует 'рубеж' в запросе, поэтому файл передается как строка. –
Если вам нужно кодировать параметры как данные в виде многостраничной формы, вы можете использовать функциональность из пакета электронной почты стандартной библиотеки Python или, например, рецепт по адресу http://code.activestate.com/recipes/578668-encode-multipart-form -data-for-uploading-files-via /. Как лучше всего кодировать данные в виде многостраничных данных, это отдельная проблема с той, из которой происходит кодирование данных (например, «статический файл» в App Engine) или как вы используете кодированную полезную нагрузку (например, для urlfetch). –
ОК, использование библиотеки 'poster' помогло мне. Но я тестировал и - я могу читать файлы, даже если я не указываю 'application_readable: true'. –