i am working on a mobile app that record a video and upload to our Youtube acount so, i have a token and a refresh token, i can refresh the token when it expires, but i am not able to upload a video, here is a sample how i try :
override fun uploadFile(sourceFileUri: String) {
doAsync{
val fileName = sourceFileUri
var conn: HttpURLConnection? = null
var dos: DataOutputStream? = null
var lineEnd = "\r\n"
var twoHyphens = "--"
var upLoadServerUri = "https://www.googleapis.com/upload/youtube/v3/videos"
var boundary = "*****"
var bytesRead: Int
var bytesAvailable: Int
var bufferSize: Int
var buffer: ByteArray
var maxBufferSize = 1 * 1024 * 1024
var sourceFile = File(sourceFileUri)
try {
// open a URL connection to the Servlet
val fileInputStream = FileInputStream(sourceFile)
val url = URL(upLoadServerUri)
// Open a HTTP connection to the URL
conn = url.openConnection() as HttpURLConnection
conn.doInput = true // Allow Inputs
conn.doOutput = true // Allow Outputs
conn.useCaches = false // Don't use a Cached Copy
conn.requestMethod = "POST"
conn.setRequestProperty("Connection", "Keep-Alive")
conn.setRequestProperty("Authorization", "Bearer XXXXXXXXXX")
conn.setRequestProperty("Content-Type", "application/json")
conn.setRequestProperty("X-Upload-Content-Length", sourceFile.readBytes().size.toString())
conn.setRequestProperty("X-Upload-Content-Type", "video/mp4")
conn.setRequestProperty("part", "snippet,status")
conn.setRequestProperty("snippet.categoryId", "22")
conn.setRequestProperty("snippet.defaultLanguage", "")
conn.setRequestProperty("snippet.description", "Video evidencia carservice")
conn.setRequestProperty("snippet.tags[]", "")
conn.setRequestProperty("snippet.title", "Orden: 1500 Frenos")
conn.setRequestProperty("status.embeddable", "")
conn.setRequestProperty("status.license", "")
conn.setRequestProperty("status.privacyStatus", "private")
conn.setRequestProperty("status.publicStatsViewable", "")
dos = DataOutputStream(conn.outputStream);
// dos.writeBytes(twoHyphens + boundary + lineEnd)
// create a buffer of maximum size
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = ByteArray(bufferSize);
// read file and write it into form...
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);
}
var serverResponseCode = conn.responseCode
val serverResponseMessage = conn.responseMessage
Log.i("uploadFile", "HTTP Response is : "
+ serverResponseMessage + ": " + serverResponseCode)
fileInputStream.close();
dos.flush();
dos.close();
} catch (e:Exception) {
e.printStackTrace()
}
}.execute()
}
i am getting: Bad Request: 400
i can't use the java library because these not have an option to upload video to our own acount
well, thanks in advance
i get an example from here and try to adapt these, but i am not sure if is the correct way to do that
P.S. sorry for my bad english...