当前位置: 首页 > 知识库问答 >
问题:

使用HttpClient和MultipartEntity将文件上载到Solr

盖昊东
2023-03-14

httpclient,HttpTime 4.1.3

我试图通过http将文件上载到远程服务器,但没有成功。

这是我的代码:

    HttpPost method;
    method = new HttpPost(solrUrl + "/extract");
    method.getParams().setParameter("literal.id", fileId);
    method.getParams().setBooleanParameter("commit", true);

    MultipartEntity me = new MultipartEntity();
    me.addPart("myfile", new InputStreamBody(doubleInput, contentType, fileId));

    method.setEntity(me);
    //method.setHeader("Content-Type", "multipart/form-data");
    HttpClient httpClient = new DefaultHttpClient();
    HttpResponse hr = httpClient.execute(method);

服务器是Solr。

这是为了替换像这样调用curl的工作bash脚本,

<代码>卷曲http://localhost:8080/solr/update/extract?literal.id=bububu

如果我尝试设置“内容类型”“多部分/表单数据”,接收部分会说没有边界(这是真的):

HTTP状态500-请求被拒绝,因为找不到多部分边界

如果我省略此标头设置,服务器会发出错误描述,据我发现,该描述表明内容类型不是multipart[2]:

HTTP状态400。客户端发送的请求语法不正确([doc=null]缺少必填字段:id)

这与[1]有关,但我无法从中确定答案。我在想,

我也处于同样的情况,但不知道该怎么办。我希望MultipartEntity会告诉HttpPost对象它是多部分的,形成数据并有一些边界,我不会自己设置内容类型。我不太明白如何为实体提供边界-多方实体没有像setBoundary这样的方法。或者,如何获得随机生成的边界,以便自己在addHeader中指定它-也没有getBoundary方法。。。

[1]使用HttpClient4上传文件时设置标题“Content-Type”的问题

[2] http://lucene.472066.n3.nabble.com/Updating-the-index-with-a-csv-file-td490013.html

共有1个答案

龚凌
2023-03-14

我怀疑

method.getParams().setParameter("literal.id", fileId);
method.getParams().setBooleanParameter("commit", true);

在第一行中,fileId是字符串还是文件指针(或其他东西)?我希望是一根绳子。至于第二行,您可以设置一个普通参数。

我正在尝试处理HTTP状态400。我不太懂Java(或者是.Net?)

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error

 类似资料:
  • 根据SkyDrive api(http://msdn.microsoft.com/en-us/library/live/hh826531.aspx#uploading_files),我在帖子请求的正文中以字节[]传递图像的内容。文件创建发生在skyDrive服务器上,但当我在skyDrive中打开它时,它说“文件应用程序被损坏或损坏”。 请求的正文 --A300x内容处理:表单数据;name=“f

  • 我尝试使用C#将文件上传到FTP服务器。文件已上传,但字节为零。

  • 我正在尝试使用Support Bee API创建附件,如下所述:https://supportbee.com/api#create_attachment 我编写了一个服务,它使用创建并发送使用文件名的请求。 如果我在《邮递员》中测试,它会成功。我正在为正文使用,只是从UI中选择要上载的文件: 当我试图通过我的服务上传它时,它不起作用: 这将导致500内部服务器错误。检查对象时,我可以看到它的标题值

  • 我在尝试将文件上传到我的S3存储桶时遇到了问题。一切正常,除了我的文件参数似乎不合适。我正在使用Amazon S3 sdk从nodejs上传到s3。 以下是我的路线设置: 这是个项目。upload()函数: 将“Body”参数设置为类似“hello”的字符串可以正常工作。根据doc,Body必须获取(Buffer、类型化数组、Blob、String、ReadableStream)对象数据。但是,上

  • 我正在尝试上传一个文本文件(也尝试了PDF等)到Salesforce。文本文件包含“Hello World”。 这是我正在使用的代码 这将导致以下看起来符合Salesforce指导原则的请求正文:https://developer.Salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_insert_update_bl

  • 我有同样的问题输入流。你能分享更多关于你的修复的细节吗? 谢谢,哈莎 链接到您的问题 JavaApache HttpClient上传文件出错