Я хочу загрузить видеофайл на мой Youtube.
Я знаю официальный сайт (https://developers.google.com/youtube/v3/docs/videos), но я использую платформу Android, но нет служб воспроизведения Android.
А потом я узнаю о клиентской библиотеке Google API.
Я смотрю примеры API (https://github.com/youtube/api-samples/blob/master/java/src/main/java/com/google/api/services/samples/youtube/cmdline/data/UploadVideo.java).
Пример использования com.google.api.services.youtube
. Но я не могу использовать API YouTube.
Я просто загружаювидео файл через http в java без YouTube API.
Это мой тестовый источник. Аннотация (// это не работает) отправляет vedio. Если источник Uncommented, я получил 400 ответов. Если источник Комментарий,Я получил 200 ответов.
public static String uploadMetaData(String filePath, boolean retry, String accessToken) throws IOException {
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024;
//String baseURL = "https://www.googleapis.com/youtube/v3/videos";
String baseURL = "https://www.googleapis.com/upload/youtube/v3/videos";
String urlData = "uploadType=resumable&part=snippet,status,contentDetails";
String uploadUrl = baseURL + "?" + urlData;
String postDataForm = "{\n\"snippet\": {\n\"title\": \"%s\",\n\"description\": \"%s\",\n\"tags\": " + "[\"cool\", \"video\", \"more keywords\"],\n\"categoryId\": 22\n},\n\"status\": " + "{\n\"privacyStatus\": \"public\",\n\"embeddable\": True,\n\"license\": \"youtube\"\n}\n}";
String postData = String.format(postDataForm, "hong", "hong", "hong");
JSONObject jsonObj = null;
try {
jsonObj = new JSONObject(postData);
} catch (JSONException e) {
e.printStackTrace();
}
URL url = new URL(uploadUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("Host", "www.googleapis.com");
urlConnection.setRequestProperty("Authorization", String.format("Bearer %s", accessToken));
urlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
urlConnection.setRequestProperty("X-Upload-Content-Type", "video/*");
//urlConnection.setRequestProperty("Content-Length", String.valueOf(postData.length()));
//urlConnection.setRequestProperty("X-Upload-Content-Length", );
urlConnection.setDoOutput(true);
String uploadFileName = "1541437905497.mp4";
String fileName = Environment.getExternalStorageDirectory().getPath() + "/cmxMediaGallery/1541437905497.mp4";
FileInputStream fileInputStream = new FileInputStream(fileName);
DataOutputStream dos = new DataOutputStream(urlConnection.getOutputStream());
dos.writeBytes(jsonObj.toString());
// this is not working
/*dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=" + uploadFileName + ";filename="
+ fileName + lineEnd);
dos.writeBytes(lineEnd);
// create a buffer of maximum size
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}*/
dos.flush();
dos.close();
int responseCode = urlConnection.getResponseCode();
if (responseCode < 200 || responseCode >= 300) {
if ((responseCode + "").startsWith("4") && retry) {
return uploadMetaData(filePath, false, accessToken);
} else {
throw new IOException(String.format("response code='%s' (code %d)" + " for %s",
urlConnection.getResponseMessage(), responseCode, urlConnection.getURL()));
}
}
Log.d("Hong", "responseCode : " + responseCode);
return urlConnection.getHeaderField("Location");
}
В некоторых примерах используется multipart., Но он работает. connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
Я хочу знать, как загрузить видеофайл через HTTP POST в JAVA без использования YouTube API.