2013-06-21 7 views
1

Я пытаюсь получить простую чтение файла в GAE python. Я хочу разрешить пользователям загружать файл csv непосредственно со своего диска и отображать его в текстовом поле. У меня возникло множество неприятностей. Любая помощь будет оценена по достоинству. Я предпочел бы избегать использования blobstore, если это возможно. Я не хочу сохранять данные навсегда, я просто хочу использовать их, чтобы люди могли легко заполнить текстовую область.Загрузка Google App Engine в TextArea (без blobstore)

Вот что моя форма выглядит

<div class = "section hidden" id ="file_choice"> 
    <form action="post"enctype="multipart/form-data"> 
Choose a '.CSV' file you want to upload or convert. 
    <br> 
     <input type = "file" id = "filein" name = "filecsv"/> 
    <br> 
    <i>if you are unsure how to convert your file to csv click <a hred = "/instructions">here</a>  </i> 
    <br> 
    <input type="Submit" name="submit_final"/> 
    <br> 
    Alternatively you can use this text box to copy paste from any editor. 
    <textarea name="txtcsv" cols="150" rows="30">{{myFile}}</textarea> 
</form> 
</div> 

Вот что мой код выглядит,

class Handler(webapp2.RequestHandler): 

#wraps response.out.write for ease of typing 
def write(self, *a, **kw): 
    self.response.out.write(*a,**kw) 

#renders a template as a string 
    def render_str(self,template,**params): 
    t = jinja_env.get_template(template) 
    return t.render(params) 

#renders the template to screen using write 
def render(self,template,**kw): 
    self.write(self.render_str(template,**kw)) 

class MainHandler(Handler): 
def get(self): 
    self.render('parseForm.html') 
def post(self): 
    test =self.request.POST['filecsv'].getvalue() 
    self.render('parseForm.html',myFile=test,error="ERRORRRR") 

Сейчас текстовое поле получает выход в качестве имени файла.

ответ

0

Документы по загрузке файлов для gae довольно расплывчаты. Единственная строка в webapp2 документ:

Загруженные файлы доступны в cgi.FieldStorage (см модуль CGI) экземпляры непосредственно в request.POST.

Я буду следовать за этот пост с моим собственным вопросом на эту тему, но если вы используете:

test = self.request.POST['filecsv'].value 

вместо getvalue() (который выдает ошибку для меня), то вы увидите, выведенный вывод вашего файла csv.

+1

Это лучший ответ. Если бы у меня была репутация для вас, я бы :( – Mallen

0

самый простой способ это get непосредственно из объекта запроса

self.request.get("filecsv") 

это даст вам файл CSV (в виде исходных данных)

Кроме того, вы, вероятно, не должны генерировать HTML из внутри почтового метода. После этого и клиент хочет обновить страницу, ему будет предложено повторно отправить данные сообщения, на которые они могли бы невинно нажать «Да». Лучше всего делать это, чтобы перенаправить на другой или тот же URL

self.redirect("/another-page") 

или если вы хотите, чтобы вернуться к той же странице

self.redirect(self.request.url) 
+0

Я просто использовал этот метод, чтобы быстро показывать результаты, когда я отлаживал проблему. Кроме того, это просто дает мне название файла. Я не совсем уверен почему это так. – Mallen