【问题标题】:Upload file and store in session or DB上传文件并存储在会话或数据库中
【发布时间】:2014-03-02 21:05:50
【问题描述】:

我知道上传到 GAE 的文件必须存储在 GCS 中 - 但是如果我希望将数据存储在 BLOB 或会话中以便立即处理和丢弃,该怎么办?

有可能吗?临时文件存储在哪里?在当前请求超时或完成之前,我可以访问 $_FILES 全局的内容吗???

【问题讨论】:

  • 尚不清楚上传到 GCS 会如何为您带来任何改变。你能澄清一下吗?
  • 当然...当您上传 CSV 文件时,它通常会上传到临时路径,然后使用 PHP 的 move_uploaded_file() 您永久重新定位文件,并且当请求完成时临时文件不再可用(虽然我认为它会在 /var/tmp (C:/Windows/temp) 中停留一段时间,直到服务清理文件。无论如何,我只需要知道 $_FILES 变量在 GAE 上是否可用,这样我就可以移动将数据放入 BLOB 而不是文件位置。

标签: php google-app-engine


【解决方案1】:

我没有使用 PHP。在 Python 中,您可以将多部分表单数据发布到您自己的处理程序,而无需使用 blobstore 或 GCS。您可以在处理程序中读取数据(临时 StringIO 对象)。

这仅适用于小文件!我看不出这也可以在 PHP 中工作。

Python 示例.py:

import webapp2
import mimetypes

class FileUpload(webapp2.RequestHandler):

    def get(self):

        form = """
        <!DOCTYPE HTML>
        <html lang="en">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            <title>File Upload</title>
        </head>
        <body>
            <form action="/file_upload" enctype="multipart/form-data" method="post">
                <div><input type="file" name="file" /></div>
                <div><input type="submit" value="Upload"></div>
            </form>
        </body>
        </html>
        """

        self.response.headers[b'Content-Type'] = b'text/html'
        self.response.write(form)

    def post(self):

        file_upload = self.request.POST.get("file", None)
        name = file_upload.filename
        data = file_upload.file.read()

        self.response.headers[b'Content-Type'] = mimetypes.guess_type(name)[0]
        self.response.write(data)

路由:webapp2.Route(r'/file_upload', handler='example.FileUpload')

【讨论】:

    【解决方案2】:

    BlobStore 与 GCS 相比没有任何优势,而且成本更高。 Memcache 随时可能丢失。

    我建议您将文件上传到 Google Cloud Storage。下次需要的时候,从 GSC 中读入一个字符串,然后存储到 Memcache 中。当然,如果您经常需要此文件,则这样做的唯一原因。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-10
    • 2021-05-31
    • 2014-01-11
    • 2015-03-30
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多