首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android to appEngine图像内容类型

问android to appEngine图像内容类型
EN

Stack Overflow用户
提问于 2010-10-04 18:51:33
回答 1查看 2.5K关注 0票数 1

我正在用安卓手机向AppEngine发送一张图片。AppEngine抛出了内容异常。我的淘汰过程失败了,所以我怀疑我做了更大的错误。我有内容类型问题还是更大的问题?

根据内容类型内容类型,AppEngine日志显示以下错误-->产生的错误

multipart/mixed stream --> org.apache.commons.fileupload.FileUploadException:找不到分块边界,请求被拒绝

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

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

ANDROID代码:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
 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();
    }
}

更新:

在我将AppEngine的实体行更改为以下代码后,AppEngine仍然拒绝该请求,并显示“该请求被拒绝,因为找不到多部分边界”的错误:

代码语言:javascript
复制
FileEntity entity = new FileEntity(file, "multipart/mixed");

根据文档http://hc.apache.org/httpclient-3.x/preference-api.html,“与MultipartRequestEntity一起使用的多部分边界字符串。如果未设置,将为每个请求生成一个随机值。”

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

如何设置边界?

EN

回答 1

Stack Overflow用户

发布于 2010-10-04 19:30:05

内容类型为multipart/mixed,不是multipart/mixed流。同样有效的应该是"multipart/form-data“。但是,如果你只是上传图片,你可以上传图片为image/jpeg,然后通过调用(如果我没记错的话),request.getInputStream()从服务器上的请求中读取原始数据-根本不需要使用Apache forms库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3854529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档