gpt4 book ai didi

java - 如何在将 blob 上传到 Blobstore 的 POST 请求中提交文本字段,并在 blob 的上传处理程序中检索它?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:57 24 4
gpt4 key购买 nike

我已经在 StackOverflow 上阅读了几个类似的问题,但还没有找到解决这个问题的方法。

我正在通过 HTTPPost 将 blob 从 Android 上传到 App Engine 的 Blobstore 到 Blobstore 服务生成的上传 URL。我希望能够使用标识此 blob 的请求发送一些文本元数据。我想在上传 blob 后调用的上传处理程序 servlet 中检索此信息以及 blob 键。

问题是 blob 是使用多部分编码上传的,App Engine 不支持 Servlet v3.0 标准,所以我无法使用 req.getPart() 获取文本部分。 (Blob 本身由 Blobstore 服务返回,因此请求的那部分已经为我们解析了。)

我如何通过仅将一个文本参数与上传到 Blobstore 的文件一起传递并在上传 blob 后调用的 servlet 中检索它来解决这个问题?

非常感谢您的帮助!完全坚持这一点!

这是我在 Android 上用于 HttpPost 的代码:

        File file = new File(filePath);
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder
.create();
entityBuilder.addBinaryBody("file", file);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(blobUploadURL);
httpPost.setEntity(entityBuilder.build());
try {
HttpResponse response = httpClient.execute(httpPost);
statusCode = response.getStatusLine().getStatusCode();
}

更新(2014 年 12 月 8 日):

在为 HttpPost 请求构建多部分实体之前,我向实体构建器添加了一个文本主体,如下所示:

        String param="value";
entityBuilder.addTextBody("param", param);

对于在 blob 上传后处理 Blobstore 回调的 servlet,我使用 Google 描述的方法在 this 中解析 A​​pp Engine 上的 HttpPost 请求。教程如下:

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

String paramNames="default";

try {
ServletFileUpload upload=new ServletFileUpload();
FileItemIterator iterator=upload.getItemIterator(req);
while(iterator.hasNext()){
FileItemStream item=iterator.next();
InputStream stream=item.openStream();
if(item.isFormField()){
paramNames+=item.getFieldName() + ", ";
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
paramNames="error";
}

//save the paramNames variable in the Datastore for debugging later
saveParamNamesInDatastore(paramNames);
}

但是,当我在此操作后检查数据存储中的 paramNames 变量时,它的值仍然是“默认值”。这意味着在 Blobstore 传递给上传处理程序 servlet 的重写 POST 请求中找不到表单字段。从这里到哪里去??

最佳答案

有一种方法可以使用 blob 发布元数据,其中包含 blobkey 无法表示的信息:

  1. 在您的上传表单中,包括:

    method="post" enctype="multipart/form-data"
  2. 现在您可以添加隐藏字段:

    <input type="hidden" name="myName" value="<%= myName %>"/>
  3. 或者您可以添加输入字段:

    <input type="text" name="myText" size="50" value="Enter your text"/>
  4. 在您的 servlet 中,确保后处理程序读取元数据

    String userName = req.getParameter("myName");
  5. 现在您有了包含所有信息的上传表单。

  6. 当您传递信息来为 blob 提供服务时,您可以使用

    &blobkey=daffedafdfe&myName=Blah

因此,您并没有将信息准确地存储在 blob 本身中,但您可以将其包含在上传表单中。

关于java - 如何在将 blob 上传到 Blobstore 的 POST 请求中提交文本字段,并在 blob 的上传处理程序中检索它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27340269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com