संपादित करें: मुझे लगता है कि मैंने यह पता लगाया है कि बाइनरी डेटा भाग कैसे करें। इसे कोड में दो बार जांचें, लेकिन मुझे पूरा यकीन है कि मुझे यह सही मिला है। जोड़ा गया .debug() OAuthService करने और उत्पादन अद्यतन: अब मैं जब Vimeo API documentationHTTP 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
सामग्री-लंबाई: 339108
सामग्री प्रकार: वीडियो/mp4
.... आपकी फ़ाइल यहाँ से बाइनरी डेटा ....
मैं टिकट और हेडर ठीक कर सकता हूं। यह बस है, मैं अपनी फाइल के बाइनरी डेटा को सम्मिलित करने के लिए क्या करूं?
नोट्स:
- यह जावा में एक डेस्कटॉप अनुप्रयोग
- यह एक छोटा सा वीडियो फ़ाइल मैं परीक्षण कर रहा हूँ है
यहाँ मेरी कोड डाल (याद के लिए, मैं scribe उपयोग कर रहा हूँ है) signSendAndPrint(OAuthService service, Token accessToken, OAuthRequest request, String description)
विधि की और पर
// 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;
}
आउटपुट OAuthService.debug()
:
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
बहुत बढ़िया! अच्छी तरह से काम! आपका बहुत बहुत धन्यवाद। मुझे विश्वास नहीं है कि यह इतना आसान था, लेकिन जिस तरह से यह आधा समय है। एक बार फिर धन्यवाद :) – kentcdodds