Java 如何将视频URI转换为文件
嗨,我正在尝试将来自多媒体资料的视频uri转换为文件。我使用了下面的方法来获取文件 MainActivity.java-从多媒体资料中选择视频。 VideoUploadActivity.java将视频上载到Amazon S3Java 如何将视频URI转换为文件,java,android,Java,Android,嗨,我正在尝试将来自多媒体资料的视频uri转换为文件。我使用了下面的方法来获取文件 MainActivity.java-从多媒体资料中选择视频。 VideoUploadActivity.java将视频上载到Amazon S3 @覆盖 创建时受保护的void(Bundle savedInstanceState){ 试一试{ super.onCreate(savedInstanceState); setContentView(R.layout.activity\u video\u upload);
@覆盖
创建时受保护的void(Bundle savedInstanceState){
试一试{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u video\u upload);
Intent=getIntent();
最终字符串imguribeforapse=intent.getStringExtra(“imgUri”);
imgUri=Uri.parse(imguribeforapse);
filePath=getFilePath(VideoUploadActivity.this,imgUri);
getFileVideo();
btn_photoupload_back=(ImageView)findviewbyd(R.id.btn_photoupload_back);
btn_photoupload_back.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
onBackPressed();
}
});
img_photoupload=(VideoView)findViewById(R.id.img_photoupload);
edt_photoupload=(SocialEditText)findViewById(R.id.edt_photoupload);
img_photoupload.setVideoURI(imgUri);
img_photoupload.setOnPreparedListener(新的MediaPlayer.OnPreparedListener(){
@凌驾
已准备好公开作废(MediaPlayer MediaPlayer){
MediaController mc=新的MediaController(VideoUploadActivity.this);
主持人:setAnchorView(图片上传);
mediaPlayer.start();
mediaPlayer.setLooping(true);
}
});
userNick=getIntent().getStringExtra(“userNick”);
profileURL=getIntent().getStringExtra(“用户配置文件”);
tv\u photoupload\u write=(TextView)findviewbyd(R.id.tv\u photoupload\u write);
tv\u photoupload\u write.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(edt_photoupload.getText().toString().equals(“”){
Toast.makeText(VideoUploadActivity.this)빈 칸 없이 채워주세요.", Toast.LENGTH_LONG).show();
返回;
}否则{
上传();
}
}
});
}捕获(例外e){
e、 printStackTrace();
}
}
public void uploadImage(){
如果(f==null){
Log.d(“视频上传活动”파일이 无效的임");
}否则{
如果(amazonS3!=null){
试一试{
PutObjectRequest por=新的PutObjectRequest(BUCKET_NAME+“/postic”,f.getName(),f);
por.setCannedAcl(CanneDaccessController.PublicRead);
亚马逊3.putObject(por);
}捕获(AmazonServiceException e){
e、 printStackTrace();
}最后{
}
}
}
}
公共文件getFileVideo(){
试一试{
Log.d(“视频上传活动”,文件路径);
f=新文件(imgUri.getPath());
//我认为这种方法会导致错误。
}捕获(例外e){
e、 printStackTrace();
}
返回f;
}
公开作废上载(){
字符串url=”http://ec2-13-125-85-2.ap-northeast-2.compute.amazonaws.com/videoupload.php";
final ProgressDialog ProgressDialog=新建ProgressDialog(VideoUploadActivity.this);
progressDialog.show();
StringRequest StringRequest=new StringRequest(Request.Method.POST,url,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
Toast.makeText(VideoUploadActivity.this)영상 업로드 완료!“,Toast.LENGTH_LONG).show();
progressDialog.disclose();
完成();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(VideoUploadActivity.this,error.getMessage().toString(),Toast.LENGTH_LONG.show();
}
}){
@凌驾
受保护的映射getParams()引发AuthFailureError{
上传图像();
Map params=新哈希表();
字符串contentText=edt_photoupload.getText().toString();
长时间电流=System.currentTimeMillis();
日期日期=新日期(当前时间);
SimpleDataFormat sdf0=新SimpleDataFormat(“yyyy년 嗯월 dd일");
字符串postDate=sdf0.format(日期);
参数put(“userID”、“dddddd”);
参数put(“后内容”,contentText);
参数put(“profileURL”、“ddddd”);
String actualPath=“https://”+”s3.ap-northeast-2.amazonaws.com/“+BUCKET_NAME+”/postic/“+f.getName();
参数put(“姿势”,实际路径);
参数put(“postDate”,postDate);
返回参数;
}
};
RequestQueue RequestQueue=Volley.newRequestQueue(this);
添加(stringRequest);
}
公共字符串getRealPath(上下文,Uri contentUri){
游标=空;
试一试{
字符串[]proj={MediaStore.Video.Media.DATA};
cursor=context.getContentResolver().query(contentUri,proj,null,null,null);
int col_idx=cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
cursor.moveToFirst();
返回cursor.getString(col_idx);
}最后{
如果(光标!=null){
cursor.close();
}
}
}
@SuppressLint(“新API”)
公共字符串getFilePath(上下文上下文,Uri)引发Uri语法异常{
字符串选择=null;
字符串[]selectionArgs=null;
//Uri在KITKAT(Android 4.4)之后的版本中是不同的,我们需要
if(Build.VERSION.SDK_INT>=19&&DocumentsContract.isDocumentUri(context.getApplicationContext(),uri)){//DocumentsContract.isDocumentUri(context.getApplicationContext(),uri))
if(isExternalStorageDocument(uri)){
最终字符串docId=DocumentsContract.getDocumentId(uri);
最终字符串[]split=docId.split(“:”);
return Environment.getExternalS
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
fileUri = data.getData();
String fileAbsolutePath = fileUri.getAbsolutePath();
Intent intent = new Intent(MainActivity.class, VideoUploadActivity.class);
intent.putExtra("imgPath", fileAbsolutePath);
startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_upload);
Intent intent = getIntent();
final String imgUribeforeParse = intent.getStringExtra("imgUri");
imgUri = Uri.parse(imgUribeforeParse);
filePath = getFilePath(VideoUploadActivity.this, imgUri);
getFileVideo();
btn_photoupload_back = (ImageView) findViewById(R.id.btn_photoupload_back);
btn_photoupload_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
img_photoupload = (VideoView) findViewById(R.id.img_photoupload);
edt_photoupload = (SocialEditText) findViewById(R.id.edt_photoupload);
img_photoupload.setVideoURI(imgUri);
img_photoupload.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
MediaController mc = new MediaController(VideoUploadActivity.this);
mc.setAnchorView(img_photoupload);
mediaPlayer.start();
mediaPlayer.setLooping(true);
}
});
userNick = getIntent().getStringExtra("userNick");
profileURL = getIntent().getStringExtra("userProfile");
tv_photoupload_write = (TextView) findViewById(R.id.tv_photoupload_write);
tv_photoupload_write.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (edt_photoupload.getText().toString().equals("")) {
Toast.makeText(VideoUploadActivity.this, "빈 칸 없이 채워주세요.", Toast.LENGTH_LONG).show();
return;
} else {
Upload();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public void uploadImage() {
if (f == null) {
Log.d("VideoUploadActivity", "파일이 null임");
} else {
if (amazonS3 != null) {
try {
PutObjectRequest por = new PutObjectRequest(BUCKET_NAME + "/postpic", f.getName(), f);
por.setCannedAcl(CannedAccessControlList.PublicRead);
amazonS3.putObject(por);
} catch (AmazonServiceException e) {
e.printStackTrace();
} finally {
}
}
}
}
public File getFileVideo() {
try {
Log.d("VideoUploadActivity", filePath);
f = new File(imgUri.getPath());
// I think this method causes an error.
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
public void Upload() {
String url = "http://ec2-13-125-85-2.ap-northeast-2.compute.amazonaws.com/videoupload.php";
final ProgressDialog progressDialog = new ProgressDialog(VideoUploadActivity.this);
progressDialog.show();
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(VideoUploadActivity.this, "영상 업로드 완료!", Toast.LENGTH_LONG).show();
progressDialog.dismiss();
finish();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(VideoUploadActivity.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
uploadImage();
Map<String,String> params = new Hashtable<String, String>();
String contentText = edt_photoupload.getText().toString();
long timecurrent = System.currentTimeMillis();
Date date = new Date(timecurrent);
SimpleDateFormat sdf0 = new SimpleDateFormat("yyyy년 MM월 dd일");
String postDate = sdf0.format(date);
params.put("userID", "dddddd");
params.put("postContent", contentText);
params.put("profileURL", "ddddd");
String actualPath = "https://" + "s3.ap-northeast-2.amazonaws.com/" + BUCKET_NAME + "/postpic/" + f.getName();
params.put("postURL", actualPath);
params.put("postDate", postDate);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
public String getRealPath(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Video.Media.DATA};
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int col_idx = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
cursor.moveToFirst();
return cursor.getString(col_idx);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
@SuppressLint("NewApi")
public String getFilePath(Context context, Uri uri) throws URISyntaxException {
String selection = null;
String[] selectionArgs = null;
// Uri is different in versions after KITKAT (Android 4.4), we need to
if (Build.VERSION.SDK_INT >= 19 && DocumentsContract.isDocumentUri(context.getApplicationContext(), uri)) {//DocumentsContract.isDocumentUri(context.getApplicationContext(), uri))
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
return Environment.getExternalStorageDirectory() + "/" + split[1];
} else if (isDownloadsDocument(uri)) {
final String id = DocumentsContract.getDocumentId(uri);
uri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
} else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("image".equals(type)) {
uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
selection = "_id=?";
selectionArgs = new String[]{
split[1]
};
}
}
if ("content".equalsIgnoreCase(uri.getScheme())) {
String[] projection = {
MediaStore.Images.Media.DATA
};
Cursor cursor = null;
try {
cursor = context.getContentResolver()
.query(uri, projection, selection, selectionArgs, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} catch (Exception e) {
}
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/
private boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is DownloadsProvider.
*/
private boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is MediaProvider.
*/
private boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
public File getFileImage(Bitmap bmp) {
try {
filePath = imgUri;
fileName = filePath.getLastPathSegment();
f = new File(getApplicationContext().getCacheDir(), fileName + ".jpg");
f.createNewFile();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 75, baos);
byte[] imageBytes = baos.toByteArray();
FileOutputStream fos = new FileOutputStream(f);
fos.write(imageBytes);
fos.flush();
fos.close();
} catch (Exception e)
{
e.printStackTrace();
}
return f;
}