Я передаю статический KML из хранилища больших двоичных файлов в качестве файла, который я сохранил в хранилище больших двоичных объектов
class KMLHandler2(blobstore_handlers.BlobstoreDownloadHandler):
def get(self):
resource = 'AMIfv965WtxAc_rWOVjSSx423_oe6f-g5obWYNKX5scg-1gqvISyaZCnv6lRaqro2wOVNOogttyMOylFLsRYZ3Y9UYIe-A69vAt4pdJB2-SHUcdVEM2v0XVLxzT3fTlxwXQVhzmsHPwALH_rCSFIvmYcuV37asVD0Q'
resource = str(urllib.unquote(resource))
blob_info = blobstore.BlobInfo.get(resource)
self.send_blob(blob_info)
Это работает, но я хочу регулярно обновлять файл.Файл сгенерирован из /list.kml
, так что я мог прочитать его прямо оттуда, но затем он истекает, поэтому я планирую сделать свою первую вспомогательную задачу, которая читает файл из list.kml
и записывает его в хранилище BLOB-объектов с тем же ключом, нокак мне это сделать, когда единственными примерами являются как создать новый файл?У меня есть места в коде, где я обновляю слой данных, и это не очень часто.Можете ли вы предложить, как я должен делать, когда я обновляю файл?Я полагаю, что я хочу, чтобы ключ и идентификатор были одинаковыми, и заменили старый блоб вместо того, чтобы писать новый и обновлять ключ.Вы можете мне помочь?Документы движка приложения говорят о том, как написать файл магазина блогов, но только новый, я не знаю, как редактировать или заменить файл, учитывая его ключ, и я думаю, что это то, что мне нужно сделать как задачу или задание cron, так чтоЯ прошу вашей помощи.
Я мог бы создать обработчик, как в документах, но это для создания файла, а не его изменения / замены:
class CreateKMLHandler(webapp2.RequestHandler):
def get(self):
# Create the file
file_name = files.blobstore.create(mime_type='application/octet-stream')
# Open the file and write to it
with files.open(file_name, 'a') as f:
f.write('data')
# Finalize the file. Do this before attempting to read it.
files.finalize(file_name)
# Get the file's blob key
blob_key = files.blobstore.get_blob_key(file_name)
Спасибо
Обновление
Я пытаюсь использовать этот код для создания нового файла, но при этом возникает ошибка приложения крайнего срока, ошибка 5, которая, как я полагаю, является проблемой тайм-аута.Как я могу сделать это вместо этого?
class CreateKMLHandler(webapp2.RequestHandler):
def get(self):
# Create the file
file_name = files.blobstore.create(mime_type='application/octet-stream')
url = 'http://montaoproject.appspot.com/list.kml'
result = urlfetch.fetch(url)
if not result.content:
return
# Open the file and write to it
with files.open(file_name, 'a') as f:
f.write(result.content)
# Finalize the file. Do this before attempting to read it.
files.finalize(file_name)
# Get the file's blob key
blob_key = files.blobstore.get_blob_key(file_name)
self.out.write(blob_key)