【问题标题】:Problem serving blobs in GAE在 GAE 中提供 blob 的问题
【发布时间】:2011-11-19 10:31:28
【问题描述】:

我目前正在构建一个网络应用程序,允许用户通过 blobstore 上传内容并在以后下载它。

但是,负责下载的 servlet 称为 BlobServiceServlet 每当用户下载 blob 时,文件名都会更改为“BlobServiceServlet”,并且扩展名有时也会更改为 .bin。有谁知道如何解决这个问题?

【问题讨论】:

    标签: java google-app-engine blobstore


    【解决方案1】:

    在响应中添加“Content-disposition”标头。

    有关示例,请参阅 http://en.wikipedia.org/wiki/MIME#Content-Disposition

    例如,在处理程序中,

    self.response.headers['Content-Disposition'] = 'attachment; filename=foo.doc'
    

    【讨论】:

    • 哎呀,对不起,我不太明白。我对此不是很熟悉。你能举个代码例子吗?
    • 万一有人在使用 java,我感谢 Dave。你只需要把 response.addHeader("Content-Disposition","filename="+YOUR_FILE_NAME);
    【解决方案2】:

    只是一个附加信息。 这是让浏览器知道文件大小的代码:

    BlobInfoFactory blobInfoFactory = new BlobInfoFactory(DatastoreServiceFactory.getDatastoreService());
    BlobInfo blobInfo = blobInfoFactory.loadBlobInfo(blobKey);
    resp.setContentLength(new Long(blobInfo.getSize()).intValue());
    resp.setHeader("content-type", blobInfo.getContentType());
    resp.setHeader("content-disposition", "attachment;filename=" + blobInfo.getFilename());
    blobstoreService.serve(blobKey, resp);
    

    请注意,如果您的文件大小超过 1MB,则文件大小不会发送到浏览器。 GAE 一次读取 1MB 的 blob,并覆盖响应中的文件大小标头。

    我在这里找到了所有这些信息: http://www.mail-archive.com/google-appengine@googlegroups.com/msg29314.html

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      相关资源
      最近更新 更多