1

我正在尝试在 GAE python 中读取简单的文件。我想允许用户直接从他们的磁盘上传一个 csv 文件并让它显示在一个文本字段中。这样做我遇到了极大的麻烦。任何帮助,将不胜感激。如果可能,我宁愿避免使用 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")

现在 textarea 以文件名的形式输出。

4

2 回答 2

0

最简单的方法是get直接从请求对象

self.request.get("filecsv")

这将为您提供 csv 文件(以原始数据的形式)

此外,您可能不应该从 post 方法中生成 html。完成此操作后,如果客户想要刷新页面,她/他将被询问是否重新发送他们可能会无意中单击“是”的帖子数据。最好的办法是重定向到另一个或相同的 url

self.redirect("/another-page")

或者如果您想返回同一页面

self.redirect(self.request.url) 
于 2013-06-23T18:45:11.853 回答
0

gae 文件上传的文档非常模糊。webapp2 文档中的唯一一行:

上传的文件可作为 cgi.FieldStorage(参见 cgi 模块)实例直接在 request.POST 中使用。

我将在这篇文章之后提出我自己关于这个主题的问题,但如果你使用:

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

而不是getvalue()(这对我来说会引发错误),然后您将看到 csv 文件的渲染输出。

于 2013-06-22T03:56:55.243 回答