Загрузить видео файл с помощью HttpClient - PullRequest
1 голос
/ 12 октября 2010

Я создаю Java-клиент, который автоматически загружает файл с Java-сервера в Panda Instance, который я установил в своем облаке EC2, используя их AMI.Я пытаюсь использовать Apache HTTP Components для загрузки на сервер Panda ( 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)

Чего мне не хватает?Почему я получаю сломанную трубу.Если я использую один и тот же код для загрузки в какой-либо сервлет, тогда я работаю нормально, но не с Panda Instance.Есть идеи?

Ответы [ 3 ]

4 голосов
/ 22 ноября 2012

Я смотрел на этот вопрос, пытаясь найти решение для загрузки в pandastream из Java.Не удалось найти библиотеку с этой функциональностью, поэтому обновил panda-lib для этого.

https://github.com/maxhille/panda-lib

1 голос
/ 12 октября 2010

Чтобы облегчить устранение неполадок и выяснить, что происходит:

  • включить Уровень проводов HttpClient регистрация
  • используйте LiveHttpHeaders или подобный плагин, чтобы узнать , как браузер обрабатывает это
  • используйте WireShark или аналогичный инструмент для проверки трафика сетевого уровня

Затем сравните различия между браузером и HttpClient .

Я заметил одну вещь: в своем коде вы публикуете видео как параметр "userfile", но Документация по API PandaStream говорит, что вам следует использовать параметр "file". Не уверен, если это имеет значение, хотя.

Даже если имя параметра неверно, PandaStream все равно должен вернуть правильный ответ, а не просто закрыть соединение в случае ошибки.

Наконец, вы настроили PandaStream для отправки вам сообщений об ошибках? Если нет, то это может помочь, если возникнут некоторые ошибки (см. руководство по началу работы ).

0 голосов
/ 05 ноября 2010

Привет, я Вивьен, технический директор компании pandastream.Я начал делать Java-клиент, но у меня не было времени, чтобы закончить его.если хочешь раскошелиться, будь свободен.

https://github.com/vivienschilis/panda_client_java

...