class SaveVideoToRemoteURL(private val activity: AppCompatActivity) : Example(activity) {
override fun invoke() {
val settingsList = VideoEditorSettingsList(false)
.configure<LoadSettings> {
it.source = activity.resourceUri(R.raw.skater)
}
VideoEditorBuilder(activity)
.setSettingsList(settingsList)
.startActivityForResult(activity, EDITOR_REQUEST_CODE)
settingsList.release()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
super.onActivityResult(requestCode, resultCode, intent)
intent ?: return
if (requestCode == EDITOR_REQUEST_CODE) {
val result = EditorSDKResult(intent)
when (result.resultStatus) {
EditorSDKResult.Status.CANCELED -> showMessage("Editor cancelled")
EditorSDKResult.Status.EXPORT_DONE -> {
activity.lifecycleScope.launch {
showLoader(true)
val response = runCatching {
upload(result.resultUri!!, activity.contentResolver)
}.getOrDefault(false)
showLoader(false)
showMessage(if (response) "Uploaded successfully" else "Upload failed")
}
}
else -> {
}
}
}
}
}
suspend fun upload(uri: Uri, contentResolver: ContentResolver): Boolean {
return withContext(Dispatchers.IO) {
val url = URL("https://httpbin.org/post")
val boundary = "Boundary-${System.currentTimeMillis()}"
val httpsURLConnection = url.openConnection() as HttpsURLConnection
httpsURLConnection.addRequestProperty(
"Content-Type",
"multipart/form-data; boundary=$boundary"
)
httpsURLConnection.requestMethod = "POST"
httpsURLConnection.doInput = true
httpsURLConnection.doOutput = true
val outputStreamToRequestBody = httpsURLConnection.outputStream
val httpRequestBodyWriter = BufferedWriter(OutputStreamWriter(outputStreamToRequestBody))
httpRequestBodyWriter.write("\n--$boundary\n")
httpRequestBodyWriter.write(
"Content-Disposition: form-data;"
+ "name=\"media\";"
+ "filename=\"imgly_media\""
+ "\nContent-Type: ${contentResolver.getType(uri)}\n\n"
)
httpRequestBodyWriter.flush()
val inputStreamToFile = contentResolver.openInputStream(uri)!!
var bytesRead: Int
val dataBuffer = ByteArray(1024)
while (inputStreamToFile.read(dataBuffer).also { bytesRead = it } != -1) {
outputStreamToRequestBody.write(dataBuffer, 0, bytesRead)
}
outputStreamToRequestBody.flush()
httpRequestBodyWriter.write("\n--$boundary--\n")
httpRequestBodyWriter.flush()
outputStreamToRequestBody.close()
httpRequestBodyWriter.close()
val responseCode = httpsURLConnection.responseCode
Log.d("IMG.LY", httpsURLConnection.inputStream.bufferedReader().use { it.readText() })
responseCode == HttpURLConnection.HTTP_OK
}
}