4

Моя проблема вращается вокруг пользователя, который загружает текстовый файл в мое приложение. Мне нужно получить этот файл и обработать его с помощью своего приложения, прежде чем сохранять его в хранилище данных. Из небольшого числа, которое я прочитал, я понимаю, что загрузка пользователя переходит непосредственно к хранилищу данных как кляксы, и это нормально, если я могу затем получить этот файл, выполнить операции над ним (что означает изменение данных внутри), а затем переписать его обратно в хранилище данных. Все эти операции должны выполняться приложением. К сожалению, из документационного хранилища http://code.google.com/appengine/docs/python/blobstore/overview.html приложение не может напрямую создать блокнот в хранилище данных. Это моя главная головная боль. Мне просто нужен способ создания нового blob/файла в хранилище данных из моего приложения без какого-либо взаимодействия с пользователем.Как манипулировать файлами в datastore engine приложения google

+0

См http://code.google.com/appengine/docs/python/blobstore/overview.html#Writing_Files_to_the_Blobstore; теперь вы можете программно писать в blobstore с помощью API файлов. (обратите внимание: это на той же странице, на которой написано, что вы не можете создавать программные блокировки, так что для поддержания актуальности документов:)) – geoffspear

ответ

2

blobstore != datastore.

Вы можете читать и записывать данные в датасторе столько, сколько вы хотите так долго, как ваши данные < 1MB с помощью db.BlobProperty на вашей организации.

Как Wooble комментарии, новый File API позволяет писать в Blobstore, но если вы не пошагово сочинительство к Blobstore-файл с помощью задач или что-то вроде библиотеки MapReduce вы все еще ограничена пределом 1MB API вызова для чтение/запись.

+1

Кроме того, пользовательские загрузки загружаются непосредственно в blobstore, если вы явно используете blobstore для загрузки - в противном случае они отправляются в ваше приложение, как любая другая форма. –

2

Благодарим за помощь. После многих бессонных ночей, 3 книг с движками приложений и большого количества Google, я нашел ответ. Вот код (он должен быть довольно понятны):

from __future__ import with_statement 
from google.appengine.api import files 
from google.appengine.ext import blobstore 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp import util 

class MainHandler(webapp.RequestHandler): 
    def get(self): 
     self.response.out.write('Hello WOrld') 
     form=''' <form action="/" method="POST" enctype="multipart/form-data"> 
Upload File:<input type="file" name="file"><br/> 
<input type="submit"></form>''' 
     self.response.out.write(form) 
     blob_key="w0MC_7MnZ6DyZFvGjgdgrg==" 
     blob_info=blobstore.BlobInfo.get(blob_key) 
     start=0 
     end=blobstore.MAX_BLOB_FETCH_SIZE-1 
     read_content=blobstore.fetch_data(blob_key, start, end) 
     self.response.out.write(read_content) 
    def post(self): 
     self.response.out.write('Posting...') 
     content=self.request.get('file') 
     #self.response.out.write(content) 
     #print content 
     file_name=files.blobstore.create(mime_type='application/octet-stream') 
     with files.open(file_name, 'a') as f: 
      f.write(content) 
     files.finalize(file_name) 
     blob_key=files.blobstore.get_blob_key(file_name) 
     print "Blob Key=" 
     print blob_key 

def main(): 
    application=webapp.WSGIApplication([('/', MainHandler)],debug=True) 
    util.run_wsgi_app(application) 

if __name__=='__main__': 
    main() 
Смежные вопросы