Правильный способ загрузки видео на YouTube через API с Android - PullRequest
0 голосов
/ 30 января 2019

Я работаю над мобильным приложением, которое записывает видео и загружает его на нашу учетную запись Youtube, поэтому у меня есть токен и токен обновления, я могу обновить токен, когда он истекает, но я не могу загрузить видео,Вот пример, как я пытаюсь:

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()

}

Я получаю: Плохой запрос: 400

Я не могу использовать библиотеку Java, потому что у них нет возможности загружать видео на нашсобственная учетная запись

хорошо, спасибо заранее

я получаю пример из здесь и пытаюсь адаптировать их, но я не уверен, является ли правильный способ сделать это

PS извините за мой плохой английский ...

...