首页 文章

android到appEngine图像内容类型

提问于
浏览
1

我正在将图像从Android手机发送到AppEngine . AppEngine正在抛出内容异常 . 我的淘汰过程失败了,所以我怀疑我做错了什么 . 我是否有内容类型问题或更大的问题?

AppEngine日志显示以下错误,具体取决于内容类型[内容类型 - >结果错误]:

multipart / mixed stream - > org.apache.commons.fileupload.FileUploadException:请求被拒绝,因为没有找到多部分边界请求被拒绝,因为没有找到多部分边界

image / jpg - > org.apache.commons.fileupload.FileUploadBase $ InvalidContentTypeException:请求不包含multipart / form-data或multipart / mixed流,内容类型 Headers 是image / jpg

binary / octet-stream - > org.apache.commons.fileupload.FileUploadBase $ InvalidContentTypeException:请求不包含multipart / form-data或multipart / mixed流,内容类型头是binary / octet-stream

安卓代码:

static void apachePost(File file) {
    File file = new File(directory, fileName);

    try {
        String url = "http://chexserve.appspot.com/chexappengine";

        HttpClient httpclient = new DefaultHttpClient();

        HttpPost httpPost = new HttpPost(url);

        FileEntity entity = new FileEntity(file, "multipart/mixed stream");

        httpPost.setEntity(entity);

        Log.v(Constants.CHEX,
                "executing request " + httpPost.getRequestLine());

        HttpResponse response = httpclient.execute(httpPost);

        Log.v(Constants.CHEX, "received http response " + response);

        HttpEntity resEntity = response.getEntity();

        httpclient.getConnectionManager().shutdown();

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

APPENGINE CODE:

public class ChexAppEngineServlet extends HttpServlet {

private static final Logger LOG = Logger
        .getLogger(ChexAppEngineServlet.class.getName());

/** Processes the incoming request */
@Override
protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    LOG.info("LOG: received post");

    System.out.println("PRINTLN: received post " + request);

    try {

        ServletFileUpload upload = new ServletFileUpload();
        FileItemIterator iter;

        iter = upload.getItemIterator(request);

        if (iter.hasNext()) {

            FileItemStream imageItem = iter.next();

            InputStream imgStream = imageItem.openStream();

            System.out.println("PRINTLN: created imgStream " + imgStream);

            // construct our entity objects
            Blob imageBlob = new Blob(IOUtils.toByteArray(imgStream));
            MyImage myImage = new MyImage(imageItem.getName(), imageBlob);

            System.out.println("PRINTLN: created my image " + myImage);

        } else {
            System.out.println("PRINTLN: no file in post");
            LOG.info("LOG: no file in post");
        }

    } catch (FileUploadException e) {
        LOG.info("failed to parse post request: " + e);
        e.printStackTrace();
    }
}

更新:

在我将Android的实体行更改为:之后,AppEngine仍拒绝请求“请求被拒绝,因为没有找到多部分边界”错误

FileEntity entity = new FileEntity(file, "multipart/mixed");

根据文档[http://hc.apache.org/httpclient-3.x/preference-api.html],"与MultipartRequestEntity结合使用的多部分边界字符串 . 未设置时将生成随机值对于每个请求 . “

此外,没有用于边界的setter方法 .

我该如何设置边界?

1 回答

  • 1

    内容类型是“multipart / mixed”,而不是“multipart / mixed stream” . 同样有效的应该是“multipart / form-data” . 但是,如果您只是上传图像,则可以将其作为image / jpeg上传,并通过调用(如果我没记错)读取服务器上请求的原始数据,request.getInputStream() - 无需完全使用Apache表单库 .

相关问题