当前位置: 首页 > 面试题库 >

HTTP分段和分块可以共存吗?

万俟旭
2023-03-14
问题内容

我使用Apache HttpClient发布 多个文件服务器。这是代码

    public static HttpResponse stringResponsePost(String urlString, String content, byte[] image,
        HttpContext localContext, HttpClient httpclient) throws Exception {

    URL url = new URL(URLDecoder.decode(urlString, "utf-8"));
    URI u = url.toURI();

    HttpPost post = new HttpPost();
    post.setURI(u);

    MultipartEntity reqEntity = new MultipartEntity();
    StringBody sb = new StringBody(content, HTTP_CONTENT_TYPE_JSON, Charset.forName("UTF-8"));
    ByteArrayBody ib = new ByteArrayBody(image, HTTP_CONTENT_TYPE_JPEG, "image");

    reqEntity.addPart("interview_data", sb);
    reqEntity.addPart("interview_image", ib);
    post.setEntity(reqEntity);

    HttpResponse response = null;
    response = httpclient.execute(post, localContext);

    return response;
}

问题是,MultipartEntity类仅具有isChunked()方法(始终返回false),如果我希望为我的多部分实体启用已阻止的编码,则没有“
setChunked(boolean)”选项。

我的问题是:

  1. HTTP多部分和块可以根据协议规范共存吗?如果不是,为什么其他InputStreamEntity类(如class)在setChunked(boolean)哪里MultipartEntity没有呢?

  2. 有没有什么方法可以启用分块功能一次发布多个文件,最好是使用apache库?


问题答案:

找到了我的第二个问题的解决方案,诀窍是写MultipartEntity一个ByteArrayOutputStream,创建一个ByteArrayEntityfrom
ByteArrayOutputStream并在其上启用分块。这是代码:

    ByteArrayOutputStream bArrOS = new ByteArrayOutputStream();
    // reqEntity is the MultipartEntity instance
    reqEntity.writeTo(bArrOS);
    bArrOS.flush();
    ByteArrayEntity bArrEntity = new ByteArrayEntity(bArrOS.toByteArray());
    bArrOS.close();

    bArrEntity.setChunked(true);
    bArrEntity.setContentEncoding(reqEntity.getContentEncoding());
    bArrEntity.setContentType(reqEntity.getContentType());

    // Set ByteArrayEntity to HttpPost
    post.setEntity(bArrEntity);


 类似资料:
  • 我有一个ASP. net MVC 5项目,它在特定的API区域中包含一个WebAPI。我在我的web.config中启用了IIS7错误处理,如下所示: 当404/500等发生时,这将向MVC网站的用户显示友好的消息。当WebAPI返回特定的(合法的)状态代码时,我的问题就出现了(例如,当调用'/api/Token'时为400)。在这些情况下,响应的JSON内容被IIS拦截,我的友好消息超文本标记语

  • 分页: 用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配。 分段: 将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。 分页与分段的主要区别 页是信息的物理单位,分页是为了实现非连续分配

  • 由分配的内存可以用重新分配。有类似的函数吗?当您不希望在堆上分配内存,并且需要多次分配可变堆栈内存(例如在库函数中,您需要动态内存,但不希望在堆上分配)时,重新分配堆栈内存可能很有用,因为库的用户可能使用自定义的堆分配策略。它看起来是这样的: 重要的是,这一切都发生在堆栈上。问:有重新分配动态堆栈内存的方法吗?

  • 问题内容: 我们有一个spring 3应用程序,该应用程序仍然使用不推荐使用的持久性,并且想要迁移到更现代的JPA 。 是否可以在迁移过程中同时使用两个API(可能甚至在一个事务中同时使用两个API),以便我们可以分步进行迁移? 还是我们必须大爆炸? 问题答案: 当然可以,为什么不呢。 最简单的方法是删除和配置,并分别用和替换它。 然后,以获得附加的,它公开的基本的。 这样,两种技术应该和平共处。

  • 我的应用程序使用log4j,但OkHttpClient使用java util日志记录。因此,除了log4j.properties之外,我创建了一个包含以下内容的logging.properties文件: 然后,我将此添加到用于启动应用程序的jvm参数中 但我没有看到任何新的文件夹被创建,如FileHandler所指示的。有人知道为什么吗?

  • 我的问题是,谁分配和管理这些内存段?操作系统不知道java程序正在运行,并认为它是JVM的一部分,作为计算机上的常规程序运行,JIT编译、java堆栈的使用,这些操作需要运行时内存分配,我不明白的是JVM如何将其内存划分为这些内存段。这肯定不是由操作系统来完成的,这些内存段(例如java堆栈)必须是连续的才能工作,所以如果JVM程序只是使用malloc命令来接收堆内存的最大大小并将这些内存划分为多