-1

我想上传 txt 文件并显示这个 txt。

我有上传txt到gae的代码,但是如何显示呢???

我想上传 txt 文件并显示这个 txt。

我有上传txt到gae的代码,但是如何显示呢???

我想上传 txt 文件并显示这个 txt。

我有上传txt到gae的代码,但是如何显示呢???

    import os
    import urllib

    from google.appengine.ext import blobstore
    from google.appengine.ext import webapp
    from google.appengine.ext.webapp import blobstore_handlers
    from google.appengine.ext.webapp import template
    from google.appengine.ext.webapp.util import run_wsgi_app


    class MainHandler(webapp.RequestHandler):
        def get(self):
            upload_url = blobstore.create_upload_url('/upload')
            self.response.out.write('<html><body>')
            self.response.out.write('<form action="%s" method="POST" enctype="multipart/form-data">' % upload_url)
            self.response.out.write("""Upload File: <input type="file" name="file"><br> <input type="submit" name="submit" value="Submit"> </form></body></html>""")

            for b in blobstore.BlobInfo.all():
                self.response.out.write('<li><a href="/serve/%s' % str(b.key()) + '">' + str(b.filename) + '</a>')


   class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
        def post(self):
            upload_files = self.get_uploads('file')
            blob_info = upload_files[0]
            self.redirect('/')


   class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
        def get(self, blob_key):
            blob_key = str(urllib.unquote(blob_key))
            if not blobstore.get(blob_key):
                self.error(404)
            else:
                self.send_blob(blobstore.BlobInfo.get(blob_key), save_as=True)

        def main():
            application = webapp.WSGIApplication(
                  [('/', MainHandler),
                   ('/upload', UploadHandler),
                   ('/serve/([^/]+)?', ServeHandler),
                  ], debug=True)
            run_wsgi_app(application)


     if __name__ == '__main__':
        main()
4

3 回答 3

1

您应该稍微更改上传处理程序的重定向功能,最后您应该重定向到上传的文件:

self.redirect('/serve/%s/' % blob_info.key())

另外,您的servehandler(我不确定您是否可以使用它,如果您创建自己的serve_txt函数可能会更好,无论如何我都会尝试)

class ServeHandler(webapp.RequestHandler): 
  #we want to render a page, not a download, that's why it extends RequestHandler
  def get(self, resource):
    resource = str(urllib.unquote(resource))
    blob_info = blobstore.BlobInfo.get(resource) #this should be your file
    self.response.headers['Content-Type'] = 'text/html'
    self.response.out.write(blob_info)

模板现在完全取决于你,这应该在你的页面上显示一个纯文本(作为一个 txt,你可能想在 python 使用BlobReader 类之前阅读它,然后返回正确格式的页面。我的只是一个你应该如何做的例子继续)

于 2012-12-12T09:20:18.753 回答
0

thanks ---------like it

import os
import urllib

from google.appengine.ext import blobstore
from google.appengine.ext import webapp
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app

class MainHandler(webapp.RequestHandler):
    def get(self):
        upload_url = blobstore.create_upload_url('/upload')
        self.response.out.write('<html><body>')
        self.response.out.write('<form action="%s" method="POST" enctype="multipart/form-data">' % upload_url)
        self.response.out.write("""Upload File: <input type="file" name="file"><br> <input type="submit" name="submit" value="Submit"> </form></body></html>""")

        for b in blobstore.BlobInfo.all():
            #self.response.out.write('<li><a href="/serve/%s' % str(b.key()) + '">' + str(b.filename) + '</a>')
            self.response.out.write(u'<li><a href="/serve/%s">%s</a>[%s]</li>' % (b.key(),b.filename, blobstore.BlobReader(b.key()).read())) 

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        upload_files = self.get_uploads('file')
        blob_info = upload_files[0]
        self.redirect('/')
       #contents = open(filename).read()

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
        def get(self, blob_key):
            blob_key = str(urllib.unquote(blob_key))
            if not blobstore.get(blob_key):
                self.error(404)
            else:
                self.send_blob(blobstore.BlobInfo.get(blob_key))

def main():
    application = webapp.WSGIApplication(
          [('/', MainHandler),
           ('/upload', UploadHandler),
           ('/serve/([^/]+)?', ServeHandler),
          ], debug=True)
    run_wsgi_app(application)
    print "Hello, world!1"

if __name__ == '__main__':
  main()
于 2012-12-14T13:25:56.093 回答
0

如果您想在浏览器中显示而不是保存 - 删除

save_as=真

   class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
        def get(self, blob_key):
            blob_key = str(urllib.unquote(blob_key))
            if not blobstore.get(blob_key):
                self.error(404)
            else:
                self.send_blob(blobstore.BlobInfo.get(blob_key))
于 2012-12-12T09:27:31.100 回答