【问题标题】:Does AppEngine BlobStore support Chunked Transfer Encoding for uploads (Status 411: Length required)?AppEngine BlobStore 是否支持上传的分块传输编码(状态 411:需要长度)?
【发布时间】:2012-10-19 02:44:18
【问题描述】:

我很难找到关于 AppEngine 的一个非常基本的问题的文档:

BlobStore 是否支持上传的分块传输编码?

我在 Java 中使用带有 setChunkedStreamingMode 的 HttpURLConnection 对象来上传多部分/表单数据类型请求中的文件,使用以下代码设置连接:

HttpURLConnection cxn = (HttpURLConnection) new URL(uploadUrl).openConnection();
cxn.setRequestMethod("POST");
cxn.setChunkedStreamingMode(9999);
cxn.setRequestProperty("Content-Type", "multipart/form-data; boundary=-");
cxn.setDoOutput(true);
cxn.connect();

开发服务器以状态 411 回答我的请求:需要长度。这是否意味着不支持分块传输模式,或者我是否错误地初始化了连接?生产服务器在这里的行为是否不同?这种行为是在生成上传 url 时指定最大上传大小的结果吗?

编辑:

如果我只是将cxn.setChunkedStreamingMode(9999); 行注释掉,一切正常,但我宁愿不这样做,因此我不必在发送请求之前在内存中缓冲数百 MB...

【问题讨论】:

  • 生产服务器应该处理这个 - 你试过了吗?
  • 如果您在生产环境中尝试这样做并且它正在返回该响应,我会说答案是否定的,它不支持它。但是,您不必缓冲整个文件 - 您只需要知道它的长度即可。
  • @NickJohnson 我实际上是在上传数据时即时压缩和加密数据,而我的处理功能只有几 MB/s 的吞吐量。这仍然比大多数人的上传快得多,所以如果我可以在数据可用时进行流式上传,处理根本不会导致任何减慢,但如果我需要提前做这一步,它会变得非常明显.不幸的是,由于我不知道我会得到多少压缩,所以我只有这两种选择(提前分块流式传输或完全处理以确定请求前的上传长度)。
  • @StuartLangley 刚刚读到您正在 AppEngine 团队工作,并感谢您参与了如此出色的产品!你知道是否有任何计划在开发服务器中实现分块传输?它将使使用此功能测试复杂代码(随着越来越多的 Android 应用程序使用 AppEngine,这可能会变得越来越频繁)变得更加容易。谢谢!
  • 在问题跟踪器中提交功能请求将是添加此功能的方法,如果有足够多的人为它加注星标。

标签: java google-app-engine upload blobstore chunked-encoding


【解决方案1】:

以下是我对上述问题的测试结果:

  1. 开发服务器支持上传的分块传输编码。
  2. 生产服务器确实支持它,如 Stuart 所示。 (呼)
  3. 我会报告任何对指定上传大小限制的依赖,但我怀疑它是否重要。

很遗憾,我必须编写两个版本的代码,一个用于在开发服务器上进行测试,一个用于在生产服务器上运行,但这绝对是可以接受的方案。

【讨论】:

    猜你喜欢
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多