2014-01-13 59 views
1

我正在开发一项服务以将视频上传到YouTube,并且我在V2上工作,但我正在迁移到V3,但我找不到REST端点打。将视频上传到YouTube数据API v3而不使用Java客户端库

可恢复上传为well docummented here,但直接上载仅记录为a Python script reference

我的进程无法支持可恢复的上传,而且我无法使用Java客户端库,因为我没有本地存储的文件。对于V2我使用了一种不同的方法,允许我做管道。

有没有办法在V3上做到这一点?

String lineEnd = "\r\n"; 
String twoHyphens = "--"; 

String access_token = "A1S2D3F4G5H6J7K8L9"; 
String gameClipID = "gameClipID"; 
String sourceServerURL = "sourceServerURL"; 

String boundary = "Boundary" + gameClipID; 
String closingBoundary = lineEnd + twoHyphens + boundary + twoHyphens; 

URL youTubeURL = new URL("http://uploads.gdata.youtube.com/feeds/api/users/default/uploads"); 
HttpURLConnection youTubeConnection = (HttpURLConnection)youTubeURL.openConnection(); 
youTubeConnection.setRequestMethod("POST"); 
youTubeConnection.setDoOutput(true); 
youTubeConnection.setDoInput(true); 

// Set Headers 
youTubeConnection.setRequestProperty("Authorization" , "GoogleLogin auth=" + auth); 
youTubeConnection.setRequestProperty("GData-Version", "2"); 
youTubeConnection.setRequestProperty("X-GData-Key", "key=" + developerKey); 
youTubeConnection.setRequestProperty("Slug", gameClipID); 
youTubeConnection.setRequestProperty("Accept", "*/*"); 
youTubeConnection.setRequestProperty("Accept-Charset", "UTF-8"); 
youTubeConnection.setRequestProperty("Content-Type", "multipart/related;boundary=" + boundary); 

String content = prepareContent(boundary, "Title", "Description", keywords); 
Long totalLength = (long)content.length() + (long)fileSize + (long)closingBoundary.length(); 

youTubeConnection.setRequestProperty("Content-Length", totalLength.toString()); 
youTubeConnection.setRequestProperty("Connection", "close"); 

URL sourceURL = new URL(sourceServerURL); 
HttpURLConnection sourceConnection = (HttpURLConnection) sourceURL.openConnection(); 
sourceConnection.setAllowUserInteraction(false); 
sourceConnection.setRequestProperty("Authorization", access_token); 
sourceConnection.connect(); 

BufferedInputStream bis = new BufferedInputStream(sourceConnection.getInputStream()); 

BufferedOutputStream request = new BufferedOutputStream(youTubeConnection.getOutputStream()); 

request.write(content.getBytes("UTF-8")); 

boolean eof = false; 
byte[] input = new byte[4096]; 
while (!eof) { 
    int length = bis.read(input); 
    if (length == -1) { 
     eof = true; 
    } else { 
     request.write(input, 0, length); 
    } 
} 

request.write(closingBoundary.getBytes("UTF-8")); 
request.flush(); 
request.close(); 
bis.close(); 
sourceConnection.disconnect(); 

InputStream responseStream = new BufferedInputStream(youTubeConnection.getInputStream()); 
BufferedReader responseStreamReader = new BufferedReader(new InputStreamReader(responseStream)); 

String line; 
StringBuilder stringBuilder = new StringBuilder(); 
while ((line = responseStreamReader.readLine()) != null) { 
    stringBuilder.append(line); 
} 
responseStreamReader.close(); 

String response = stringBuilder.toString(); 
responseStream.close(); 
youTubeConnection.disconnect(); 

return YouTubeClient.parseXMLResponse(response); 

回答

0

直接上传相当于文档,只是设置uploadType = direct。

您可以在此示例中将directUploadEnabled设置为true,并查看发布请求以确认。 https://github.com/youtube/api-samples/blob/master/java/src/main/java/com/google/api/services/samples/youtube/cmdline/data/UploadVideo.java#L136

此处还有directUpload的源代码,以便您可以手动构建。 https://code.google.com/p/google-api-java-client/source/browse/google-api-client/src/main/java/com/google/api/client/googleapis/media/MediaHttpUploader.java#345

+0

这仍然使用Java客户端API,这就是我想要避免的。 – avillagomez

+0

我问过你,只需创建一个演示并找到发布请求。这样你就可以用相同的选项建立你的手动发布请求。还更新了我的答案。 –

+0

谢谢,我会尝试一下,我会在找到合适的解决方案后进行投票。 – avillagomez

相关问题