gpt4 book ai didi

java - 使用 HttpClient 上传视频文件

转载 作者:行者123 更新时间:2023-11-29 08:17:00 31 4
gpt4 key购买 nike

我正在构建 Java 客户端,它会自动将文件从 Java 服务器上传到我使用 AMI 安装在我的 EC2 云上的 Panda 实例。我正在尝试使用 Apache HTTP Components 上传到 Panda Server ( Panda Stream )。它适用于我的浏览器客户端,但由于某种原因我无法从该库上传。这是我的代码:

String videoUploadUrl = "http://[panda server ip]/videos/" + getVideoID() + "/upload.xml";
File file = new File("/temp/videofile.mp4");

DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

HttpPost httppost = new HttpPost(videoUploadUrl);

MultipartEntity mpEntity = new MultipartEntity();

ContentBody fBody = new FileBody(file);

mpEntity.addPart("userfile", fBody);

httppost.setEntity(mpEntity);


System.out.println("executing request " + httppost.getRequestLine());
HttpResponse response2 = httpclient.execute(httppost); // <-- FAILS HERE
System.out.println("finish executing request");

HttpEntity resEntity = response2.getEntity();

System.out.println(response2.getStatusLine());
if (resEntity != null) {
System.out.println(EntityUtils.toString(resEntity));
}
if (resEntity != null) {
resEntity.consumeContent();
}

httpclient.getConnectionManager().shutdown();

这是我的错误日志。

executing request POST http://[panda server ip]/videos/0fbd7300-b7b2-012d-7c3f9-1223456a654/upload.xml HTTP/1.1 Method: POST
Oct 11, 2010 3:09:25 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute
INFO: I/O exception (java.net.SocketException) caught when processing request: Broken pipe
Oct 11, 2010 3:09:25 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute
INFO: Retrying request
Oct 11, 2010 3:09:55 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute
INFO: I/O exception (java.net.SocketException) caught when processing request: Broken pipe
Oct 11, 2010 3:09:55 PM org.apache.http.impl.client.DefaultRequestDirector tryExecute
INFO: Retrying request
Exception in thread "main" java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.http.impl.io.AbstractSessionOutputBuffer.write(AbstractSessionOutputBuffer.java:124)
at org.apache.http.impl.io.ContentLengthOutputStream.write(ContentLengthOutputStream.java:114)
at org.apache.http.entity.mime.content.FileBody.writeTo(FileBody.java:105)
at org.apache.http.entity.mime.HttpMultipart.doWriteTo(HttpMultipart.java:173)
at org.apache.http.entity.mime.HttpMultipart.writeTo(HttpMultipart.java:191)
at org.apache.http.entity.mime.MultipartEntity.writeTo(MultipartEntity.java:169)
at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:120)
at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:253)
at org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.java:227)
at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:248)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:623)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:455)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:694)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:625)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:603)
at testmainjava.FileUpload.main(FileUpload.java:57)

我错过了什么?为什么我的 pipe 坏了。如果我使用相同的代码上传到某个 servlet,那么我可以正常工作,但不能使用 panda 实例。有什么想法吗?

最佳答案

为了简化您的故障排除并找出发生了什么:

  • 开启HttpClient线级logging
  • 使用LiveHttpHeaders或类似的插件以了解浏览器如何处理此问题
  • 使用 WireShark 或类似工具检查网络级流量

然后,比较浏览器和HttpClient的区别

我注意到一件事:在您的代码中,您将视频作为“userfile”参数发布,但是 PandaStream API documentation说你应该使用"file"参数。不过不确定这是否有所作为。

即使参数名称错误,PandaStream 仍应返回正确的响应,而不是在出错时关闭连接。

最后,您是否将 PandaStream 配置为向您发送错误消息?如果没有,这可能会有所帮助,如果它遇到一些错误(请参阅 getting started guide)。

关于java - 使用 HttpClient 上传视频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3910424/

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