簡體   English   中英

在GAE Python中下載/列出文件

[英]Download/List files in GAE Python

我設法使上傳正常工作,但現在我必須使文件顯示在列表中(文件名,上傳/創建日期,文件類型和下載選項),我找不到如何使它正常工作

我知道我在尋找:文件名(可以鏈接以查看圖像和左側的復選框,您可以在下面的html中看到),內容類型和創建日期。

HTML:

<form action="/download" method="post">
        <table id="downloadFile" width="100%">
            <tr>
                <td>
                    <table id="downloadFileDetails">
                        <tr id="dld">
                            <td id="dld" width="2%"></td>
                            <td id="dld" width="80%">File Name</td>
                            <td id="dld" width="10%">Upload Date</td>
                            <td id="dld" width="8%">Format</td>
                        </tr>
                        <tr>
                            <td id="dld" style="vertical-align: middle; text-align: center "><input type="checkbox" name="checkFile" >&nbsp</td>
                            <td id="dld">test</td>
                            <td id="dld">test</td>
                            <td id="dld">test</td>
                        </tr>
                        {% for file in file_query %}
                        <tr>
                            <td id="dld" style="vertical-align: middle; text-align: center "><input type="checkbox" name="checkFile" >&nbsp</td>
                            <td id="dld">{{file.user}}</td>
                            <td id="dld">{{file.blob_key}}</td>
                            <td id="dld">{{file.last_touch}}</td>
                        </tr>
                        {% endfor %}
                    </table>
                </td>
            </tr>
            <tr>
                <td><input type="submit" value="Download File" name="submit"></td>
            </tr>
        </table>
    </form>

Python代碼:

import os

from google.appengine.api import users
from google.appengine.ext import blobstore
from google.appengine.ext import ndb
from google.appengine.ext.webapp import blobstore_handlers
import webapp2
import jinja2


jinja_env = jinja2.Environment(
  loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
  autoescape=True)

#Key to serve as a parent
PARENT_KEY = ndb.Key("Entity", "files_root")

# This datastore model keeps track of which users uploaded which photos.
class UserPhoto(ndb.Model):
user = ndb.StringProperty()
blob_key = ndb.BlobKeyProperty()
filename = ndb.StringProperty()
#last_touch = ndb.DateTimeProperty(auto_now_add = True)

class PhotoUploadFormHandler(webapp2.RequestHandler):
def get(self):
    file_query = UserPhoto.query(ancestor = PARENT_KEY)#.order(-UserPhoto.last_touch)
    upload_url = blobstore.create_upload_url('/upload')
    templateHome = jinja_env.get_template("templates/page.html")
    self.response.out.write(templateHome.render({"file_query": file_query}).format(upload_url))

# [START upload_handler]
class PhotoUploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
    try:
        upload = self.get_uploads()[0]
        user_photo = UserPhoto(parent = PARENT_KEY,
            user=users.get_current_user().user_id(),
            blob_key=upload.key(),
            filename = upload.filename())
        user_photo.put()


        self.redirect(self.request.referer)

    except:
        self.error(500)
# [END upload_handler]

app = webapp2.WSGIApplication([
('/', PhotoUploadFormHandler),
('/upload', PhotoUploadHandler)
#('/view_photo/([^/]+)?', ViewPhotoHandler),
], debug=True)

我在日志中得到的消息:

INFO     2016-05-14 20:54:05,506 module.py:787] default: "GET / HTTP/1.1" 200 1997
INFO     2016-05-14 20:54:05,525 module.py:787] default: "GET /static/styles.css HTTP/1.1" 304 -
INFO     2016-05-14 20:54:05,546 module.py:787] default: "GET /favicon.ico HTTP/1.1" 200 8348
INFO     2016-05-14 20:54:11,806 module.py:787] default: "POST /upload HTTP/1.1" 500 -

看來您正在從docs重新創建示例應用程序。 該示例掩蓋了一條重要的信息,可以在這里找到:

get_uploads()方法返回BlobInfo對象的列表,該列表用於請求中的每個上載文件。

因此,例如,如果要捕獲文件名,則需要在上傳處理程序中執行類似的操作(並相應地調整UserPhoto模型):

upload = self.get_uploads()[0]
user_photo = UserPhoto(
    user=users.get_current_user().user_id(),
    blob_key=upload.key(),
    filename=upload.filename
)
user_photo.put()

get_uploads方法返回BlobInfo對象的列表。 這些對象的文檔可以在這里找到:

注意:我對在AppEngine上進行上傳沒有任何經驗,並且此代碼尚未經過測試,因此在某些詳細信息中可能不正確。 我只是去看文檔。 但我懷疑這涉及到根本問題。 如果需要更改任何細節,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM