当前位置: 首页 > 面试题库 >

在Google App Engine中上传文件

桓宜
2023-03-14
问题内容

我打算创建一个Web应用程序,允许用户降级Visual Studio项目文件。但是,似乎Google App
Engine通过db.TextProperty和接受在Google服务器上上传文件和存储平面文件db.BlobProperty

我很高兴任何人都可以提供有关如何完成此工作的代码示例(客户端和服务器端)。


问题答案:

这是一个完整的工作文件。我从Google网站上提取了原始图片,并对其进行了修改,使其更加真实。

注意事项:

  1. 此代码使用BlobStore API
  2. ServeHandler类中此行的目的是“修复”密钥,以便它消除浏览器中可能发生的任何名称更改(我在Chrome中没有观察到任何名称)

    blob_key = str(urllib.unquote(blob_key))
    
  3. 最后的“ save_as”子句很重要。它将确保文件名在发送到浏览器时不会被篡改。摆脱它,观察会发生什么。

    self.send_blob(blobstore.BlobInfo.get(blob_key), save_as=True)
    

祝好运!

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()


 类似资料:
  • 我知道这是一个非常普遍的问题,但我无法在Angular 2中上传文件。我试过了 1) http://valor-software.com/ng2-file-upload/和 2) http://ng2-uploader.com/home ...但是失败了。有人用Angular上传过文件吗?你用了什么方法?如何做到这一点?如果提供任何示例代码或演示链接,我们将不胜感激。

  • 问题内容: 我正在尝试在我的GAE应用程序中上传文件。如何使用Go和使用在Google App Engine中上载文件? 问题答案: 我设法通过使用中间返回参数“其他”解决了我的问题。以下这些代码位于上传处理程序中 然后分配相应的formkey 并在我的结构值分配中像这样使用它 并非100%肯定这是正确的做法,但这解决了我的问题,它现在将图像上传到blobstore,并将其他数据和blobkey保

  • 问题内容: 我已经做了很多研究,找到了.NET的上载组件,可以用来上载大文件,具有进度条并可以继续上载大文件。我遇到了一些组件,例如AjaxUploader,SlickUpload和PowUpload,仅举几例。这些选项中的每一个都需要花钱,只有PowUpload可以执行断点续传,但是它使用Java applet来完成。我愿意为一个能够很好地完成这些工作的组件付费,但是如果我自己编写,那将是最好的

  • 问题内容: 我需要从基于Webapp2(Python)的Google App Engine应用程序中的表单中上载和处理CSV文件,我知道我可以使用blobstore临时存储文件,但我很想知道是否有一种方法可以处理该文件无需存储它。 问题答案: 上传文件的内容在您的处理程序中,因此您可以使用以下方式获取该内容(例如,假设上传文件的字段名为) 因此,现在您将内容作为字符串-可以根据需要对其进行处理。当

  • 我正在尝试使用多部分实体方法上传文件。但它失败,错误说{“错误”:“文件参数值'无'无效”} 我的代码是: File File = new File(" C:/Users/SST-06/Desktop/new . txt "); 我的实体文件包含所有提到的参数。 -hkYO-pblk 0 uqlxjtvklrbkosxz 7 mye-8 wbvbvanx Content-Disposition:f

  • 我想将文件从一台服务器上传到另一台FTP服务器,以下是我的上传文件代码,但它抛出错误为: 远程服务器返回错误:(550)文件不可用(例如,找不到文件,无法访问)。 这是我的代码: 你能告诉我哪里出了问题吗?

  • 问题内容: 有很多关于使用go 发布文件的教程,但是几乎总是以这样的方式开始: 也就是说,您将整个文件读入内存,然后将其转换为并将其传递给请求,如下所示: 如果您想发布海量文件并避免将其读取到内存中,而是将文件分块蒸出……您将如何做? 问题答案: 如果需要设置,可以手动完成。以下代码段是将文件和其他参数作为流上传的示例(基于Golang中无缓冲区Multipart POST的代码 )

  • 问题内容: 我无法正常上传多个文件。当我选择x个文件时,它成功完成,但是第一个文件被上传了x次,而其他文件则根本没有被上传。有人能指出我做错了吗? 形成: 处理文件: 问题答案: 如果有人感兴趣的话,可以像这样工作: 如果可能的话,很高兴获得带有Blob对象数组的可行解决方案,而不必要求request.args.get(“ __ UPLOADS”)。