2012-03-19 9 views
8

編集:私はバイナリデータ部分を行う方法を考え出したと思います。コードでもう一度チェックしてください。しかし、私はそれが正しいと確信しています。 OAuthServiceにを追加しました.DEBUG()と出力を更新:Vimeo API documentationJavaでファイルをアップロードするHTTP PUT

編集2で説明したようにアップロードを完了しようとする今、私は新しいエラーを取得しています。

オリジナルの質問Vimeo API (Streaming Method)を使用してビデオをVimeoにアップロードしようとしています。私はscribeを使って自分のアプリケーションを認証し、アクセストークンを取得し、ビデオアップロードの準備をしています。私はちょうどVimeoのAPIドキュメントは言う時点で何をするか分からないPUTのためのHTTPリクエストのこの例では、「ここにあなたのファイルのバイナリデータ」:

PUT http://1.2.3.4:8080/upload?ticket_id=abcdef124567890 HTTP/1.1

ホスト:1.2.3.4:8080

のContent-Length:339108

のContent-Type:ビデオ/ MP4

....ここにあなたのファイルのバイナリデータ....

チケットとヘッダーを正常に取得できます。それはちょうど私のファイルのバイナリデータを挿入するために何をするのですか?

注:

  • それはそれは私が

をテストしています小さなビデオファイルのJavaでデスクトップアプリ

  • です。ここプットのための私のコードは、(私はscribeを使用している、覚えているのです)

    // Setup File (line 52) 
    File testUp = new File("C:/Users/Kent/Desktop/test.mp4"); 
    String contentLength = Long.toString(testUp.length()); 
    System.out.println("The content length is: " + contentLength); 
    byte[] fileBytes = ByteStreams.toByteArray(new FileInputStream(testUp)); 
    
    // Upload file (line 58) 
    request = new OAuthRequest(Verb.PUT, endpoint); 
    request.addHeader("Content-Length", contentLength); 
    request.addHeader("Content-Type", "video/mp4"); 
    request.addPayload(fileBytes); 
    response = signSendAndPrint(service, accessToken, request, "Upload PUT: " + endpoint); 
    
    // Check response code is valid (line 65) 
    if (response.getCode() != 200) { 
        System.out.println("The response was not 200! It was: " + response.getCode()); 
        return; 
    } 
    
    // Verify the upload (line 71) 
    request = new OAuthRequest(Verb.PUT, endpoint); 
    request.addHeader("Content-Length", "0"); 
    request.addHeader("Content-Range", "bytes */*"); 
    response = signSendAndPrint(service, accessToken, request, "Verify Upload PUT: " + endpoint); 
    
    // Check response code is valid (line 77) 
    if (response.getCode() != 308) { 
        System.out.println("The response was not 308! It was: " + response.getCode()); 
        return; 
    } 
    
    // Complete Upload (line 83) 
    request = new OAuthRequest(Verb.PUT, endpoint); 
    request.addQuerystringParameter("method", "vimeo.videos.upload.complete"); 
    Response completeResponse = signSendAndPrint(service, accessToken, request, "complete"); // This is line 86, it's the second to top level of my code that breaks the process. 
    
    //Set video info (line 88) 
    setVimeoVideoInfo(completeResponse, service, accessToken, vimeoAPIURL); 
        } 
    
    
    
    /** 
        * Signs the request on the service, prints information on the request, sends the request, prints 
        * information on the response and returns the response 
        * 
        * @param service 
        * @param accessToken 
        * @param request 
        * @param description 
        * @return 
        */ 
        private static Response signSendAndPrint(OAuthService service, Token accessToken, OAuthRequest request, String description) { 
        service.signRequest(accessToken, request); 
        printRequest(request, description + " Request"); 
        Response response = request.send(); //This is line 105. It's the top level of my code that breaks the process 
        printResponse(response, description + " Response"); 
        return response; 
        } 
    

    signSendAndPrint(OAuthService service, Token accessToken, OAuthRequest request, String description)メソッドの出力とOAuthService.debug():あなたがアップロードを完了したときに、2つの他のパラメータを追加する必要が

    Upload PUT: http://174.129.155.54:8080/upload?ticket_id=a64ed67b4aefdc35d18aec6cfa0b7c5e Request 
    Headers: {Authorization=OAuth oauth_signature="MTPIVFfGVUQn4QswNV6av4CjzJw%3D", oauth_version="1.0", oauth_nonce="-606493399", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="MY_CONSUMER_KEY", oauth_token="MY_OAUTH_TOKEN", oauth_timestamp="1332428103", Content-Length=15125120, Content-Type=video/mp4} 
    Verb: PUT 
    Complete URL: http://174.129.155.54:8080/upload?ticket_id=a64ed67b4aefdc35d18aec6cfa0b7c5e 
    
    Upload PUT: http://174.129.155.54:8080/upload?ticket_id=a64ed67b4aefdc35d18aec6cfa0b7c5e Response 
    Code: 200 
    Headers: {null=HTTP/1.1 200 OK, Content-Length=0, Connection=close, Content-Type=text/plain, Server=Vimeo/1.0} 
    Body: 
    signing request: http://174.129.155.54:8080/upload?ticket_id=a64ed67b4aefdc35d18aec6cfa0b7c5e 
    setting token to: Token[87bddf1382ac9f423d4b7c4166bdf0b2 , fdae7a033c7e1c932abce533627d6045124e8593] 
    generating signature... 
    base string is: PUT&http%3A%2F%2F174.129.155.54%3A8080%2Fupload&oauth_consumer_key%3DMY_CONSUMER_KEY%26oauth_nonce%3D1585934110%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1332428110%26oauth_token%3DMY_OAUTH_TOKEN%26oauth_version%3D1.0%26ticket_id%3Da64ed67b4aefdc35d18aec6cfa0b7c5e 
    signature is: bhWu7IX9JKEEn/ULcpJECEuwqOc= 
    appended additional OAuth parameters: { oauth_signature -> bhWu7IX9JKEEn/ULcpJECEuwqOc= , oauth_version -> 1.0 , oauth_nonce -> 1585934110 , oauth_signature_method -> HMAC-SHA1 , oauth_consumer_key -> MY_CONSUMER_KEY, oauth_token -> MY_OAUTH_TOKEN, oauth_timestamp -> 1332428110 } 
    using Http Header signature 
    
    Verify Upload PUT: http://174.129.155.54:8080/upload?ticket_id=a64ed67b4aefdc35d18aec6cfa0b7c5e Request 
    Headers: {Authorization=OAuth oauth_signature="bhWu7IX9JKEEn%2FULcpJECEuwqOc%3D", oauth_version="1.0", oauth_nonce="1585934110", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="MY_CONSUMER_KEY", oauth_token="MY_OAUTH_TOKEN", oauth_timestamp="1332428110", Content-Length=0, Content-Range=bytes */*} *///Note, this is not part of the output, I just added */// so the rest of it doesn't appear commented out. 
    Verb: PUT 
    Complete URL: http://174.129.155.54:8080/upload?ticket_id=a64ed67b4aefdc35d18aec6cfa0b7c5e 
    
    Verify Upload PUT: http://174.129.155.54:8080/upload?ticket_id=a64ed67b4aefdc35d18aec6cfa0b7c5e Response 
    Code: 308 
    Headers: {null=HTTP/1.1 308 Resume Incomplete, Range=bytes=0-15125119, Content-Length=0, Connection=close, Content-Type=text/plain, Server=Vimeo/1.0} 
    Body: 
    signing request: http://174.129.155.54:8080/upload?ticket_id=a64ed67b4aefdc35d18aec6cfa0b7c5e&method=vimeo.videos.upload.complete 
    setting token to: Token[87bddf1382ac9f423d4b7c4166bdf0b2 , fdae7a033c7e1c932abce533627d6045124e8593] 
    generating signature... 
    base string is: PUT&http%3A%2F%2F174.129.155.54%3A8080%2Fupload&method%3Dvimeo.videos.upload.complete%26oauth_consumer_key%3DMY_CONSUMER_KEY%26oauth_nonce%3D3111236130%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1332428110%26oauth_token%3DMY_OAUTH_TOKEN%26oauth_version%3D1.0%26ticket_id%3Da64ed67b4aefdc35d18aec6cfa0b7c5e 
    signature is: vXlQ6OUKms8eHan+wEBO2HXBn/M= 
    appended additional OAuth parameters: { oauth_signature -> vXlQ6OUKms8eHan+wEBO2HXBn/M= , oauth_version -> 1.0 , oauth_nonce -> 3111236130 , oauth_signature_method -> HMAC-SHA1 , oauth_consumer_key -> MY_CONSUMER_KEY, oauth_token -> MY_OAUTH_TOKEN, oauth_timestamp -> 1332428110 } 
    using Http Header signature 
    
    complete Request 
    Headers: {Authorization=OAuth oauth_signature="vXlQ6OUKms8eHan%2BwEBO2HXBn%2FM%3D", oauth_version="1.0", oauth_nonce="3111236130", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="MY_CONSUMER_KEY", oauth_token="MY_OAUTH_TOKEN", oauth_timestamp="1332428110"} 
    Verb: PUT 
    Complete URL: http://174.129.155.54:8080/upload?ticket_id=a64ed67b4aefdc35d18aec6cfa0b7c5e&method=vimeo.videos.upload.complete 
    Exception in thread "main" org.scribe.exceptions.OAuthException: Problems while creating connection. 
        at org.scribe.model.Request.send(Request.java:70) 
        at org.scribe.model.OAuthRequest.send(OAuthRequest.java:12) 
        at autouploadermodel.VimeoTest.signSendAndPrint(VimeoTest.java:105) 
        at autouploadermodel.VimeoTest.main(VimeoTest.java:86) 
    Caused by: java.net.SocketException: Unexpected end of file from server 
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:723) 
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:589) 
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:720) 
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:589) 
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1319) 
        at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468) 
        at org.scribe.model.Response.<init>(Response.java:28) 
        at org.scribe.model.Request.doSend(Request.java:110) 
        at org.scribe.model.Request.send(Request.java:62) 
        ... 3 more 
    Java Result: 1 
    
  • 答えて

    2

    Vimeo API documentationには、vimeo.videos.upload.complete:filename、oauth_token、ticket_idの3つのパラメータが必要です。筆記者はあなたのためにoauth_tokenを世話します。

    さらに、チケットを要求するときに取得したエンドポイントではなく、元のエンドポイントを呼び出す必要があります。

    +0

    驚くばかり!完璧に動作します!どうもありがとうございました。私はそれがとてもシンプルだとは信じられませんが、それは半分の時間です。再度、感謝します :) – kentcdodds

    関連する問題