首页 \ 问答 \ 使用HttpClient上传视频文件(Upload Video file using HttpClient)

使用HttpClient上传视频文件(Upload Video file using HttpClient)

我正在构建Java客户端,它将自动将文件从Java服务器上传到我使用他们的AMI安装在我的EC2云上的Panda Instance。 我正在尝试使用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)

我错过了什么? 为什么我的管子坏了。 如果我使用相同的代码上传到某个servlet,那么我工作得很好,但不适用于panda Instance。 任何想法?


I'm building Java client that will automatically upload file from Java server to Panda Instance that I installed on my EC2 cloud using their AMI. I'm trying to use Apache HTTP Components to upload to Panda Server (Panda Stream). It works fine with my browser client but for some reason I can't upload from that library. Here is my code:

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();

And here is my error log.

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)

What am I missing? Why I'm getting broken pipe. If I use same code to upload to some servlet then I work fine but not with panda Instance. Any idea?


原文:https://stackoverflow.com/questions/3910424
更新时间:2022-03-11 10:03

最满意答案

尝试这个:

MyApp.TweetInputView = SC.View.extend({
  didInsertElement: function() {
    console.log("I've been rendered!");
  }
});

Try this:

MyApp.TweetInputView = SC.View.extend({
  didInsertElement: function() {
    console.log("I've been rendered!");
  }
});

相关问答

更多
  • 删除你的'tmp'目录,然后重新启动sc-server Delete your 'tmp' directory and then restart sc-server
  • 不建议使用超时,我不能指望您的资源在2000年之后就可以使用了 setTimeout(function() { $scope.isInitialized = true; $scope.$apply(); }, 2000); 我建议你使用文件和模块加载器库。 尝试使用带有requirejs的角度 请参阅使用angularjs + requirejs的此示例 It's not recommended to use timeout, I cannot expect tha ...
  • 您也可以尝试在应用程序中使用ready回调: App = SC.Application.create({ ready: function() { this._super(); $(".topbar").dropdown(); } }); 我认为你必须在这里调用this._super()是一个错误,并且很快就会修复它。 You might also try using a ready callback inside your application: App = SC.Applica ...
  • 以下是qooxdoo观点的答案: 我可以轻松地将代码从一个应用程序重用到另一个 是的你可以。 您可以在“库”中组织代码,这些代码可以包含在多个应用程序中。 但每个应用程序将是一个单独的整体(将其视为二进制文件库代码静态链接),没有手动复制.js文件。 你也可以轻松拥有一页静态页面吗? 我不确定你的意思。 它们只是一页,有点像gmail吗? 是的,您使用qooxdoo构建单页应用程序。 有关系吗? 它真的比不使用它更容易吗? 我的意思是框架的学习曲线等于学习html / css / javascript? 这 ...
  • 这正是{{bindAttr}}帮助程序可用的原因。 这应该为你做这项工作: This is precisely why the {{bindAttr}} helper is available. This should do the job for you:
  • 您描述的方法与将backbone.js集成到rails应用程序中的方法相同,并且它似乎工作得很好 https://github.com/codebrew/backbone-rails 这在英国存储骨干网 应用程序/资产/ Java脚本/骨干网/ 应用程序/资产/ Java脚本/骨干网/应用/型号 应用程序/资产/ Java脚本/骨干网/应用/控制器 然后在视图中有一个脚本标记,用于初始化主干