问题描述
我的应用尝试捕获视频,然后将结果发送到服务器
所以我使用下面的代码捕获视频,但是当我将其上传到服务器时,文件大小始终为0字节
因为我在临时文件中创建了它?
这是录制视频的代码
private fun recordVideo() {
val videoFile = createVideoFile()
videoFile?.let {
videoUri = FileProvider.getUriForFile(mContext,"com.video.record.fileprovider",it)
val intent = Intent(MediaStore.ACTION_VIDEO_CAPTURE)
intent.putExtra(MediaStore.EXTRA_OUTPUT,videoUri)
startActivityForResult(intent,REQUEST_VIDEO_CAPTURE)
}
}
private fun createVideoFile() : File? {
val fileName = "myVideoAndroid"
val storageDir = mActivity.getExternalFilesDir(Environment.DIRECTORY_MOVIES)
return File.createTempFile(fileName,".mp4",storageDir) // <---- because I make it in temporary file ?
}
这是清单中的provider标记
<provider
android:authorities="com.video.record.fileprovider"
android:name="androidx.core.content.FileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
这是文件路径xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android = "http://schemas.android.com/apk/res/android">
<external-path
name="my_videos"
path="Android/data/com.xxxx.mediauploader/files/Movies"/>
</paths>
视频在上传到服务器之前似乎不错,我可以完美播放。
然后我使用下面的代码通过改造将其上传
界面
@Multipart
@POST("uploadvideo")
fun uploadVideo(
@Part video: MultipartBody.Part
): Call<UploadResponse>
然后像这样使用它
private fun createVideoFile() : File? {
val fileName = "myVideoAndroid"
val storageDir = mActivity.getExternalFilesDir(Environment.DIRECTORY_MOVIES)
return File.createTempFile(fileName,storageDir)
}
val file = File(createVideoFile()!!.absolutePath)
val fileVideoPart = MultipartBody.Part.createFormData("videoFile",file.name,RequestBody.create("video/*".toMediaTypeOrNull(),file))
val call = uploadMediaAPI.uploadVideo(video = fileVideoPart)
call.enqueue(object : Callback<UploadResponse> {
})
我可以成功上传,但是结果始终是服务器中的0个字节
如何解决这个问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)