直播源码搭建教程之获取相册中的指定一个图片后上传
直播源码搭建教程之获取相册中的指定一个图片后上传实现的相关代码
1 | package com.example.myapplication;<br> import android.Manifest;<br> import android.app.ProgressDialog;<br> import android.content.ContentResolver;<br> import android.content.Context;<br> import android.content.Intent;<br> import android.content.pm.PackageManager;<br> import android.database.Cursor;<br> import android.net.Uri;<br> import android.os.Build;<br> import android.os.Bundle;<br> import android.os.Environment;<br> import android.provider.MediaStore;<br> import android.text.TextUtils;<br> import android.util.Log;<br> import android.widget.Toast;<br> import androidx.annotation.NonNull;<br> import androidx.appcompat.app.AppCompatActivity;<br> import androidx.core.app.ActivityCompat;<br> import androidx.core.content.ContextCompat;<br> import androidx.core.content.FileProvider;<br> import org.xutils.ex.HttpException;<br> import org.xutils.http.RequestParams;<br> import org.xutils.x;<br> import java.io.File;<br> import java.io.IOException;<br> import java.util.ArrayList;<br> import java.util.List;<br> public class MainActivity extends AppCompatActivity {<br> ProgressDialog dialogShibie;<br> List<File> fileArrayList;<br> private static final int CAMERA_CODE = 200 ;<br> private static final int ALBUM_CODE = 100 ;<br> @Override <br> protected void onCreate(Bundle savedInstanceState) {<br> super .onCreate(savedInstanceState);<br> setContentView(R.layout.activity_main);<br> fileArrayList = new ArrayList<>();<br> dialogShibie = new ProgressDialog( this );<br> // upload();<br> takesD();<br> }<br> @Override<br> protected void onResume() {<br> super.onResume();<br>// takesD();<br> }<br> @Override<br> public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,<br> @NonNull int[] grantResults) {<br> super.onRequestPermissionsResult(requestCode, permissions, grantResults);<br> if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {<br> if (permissions[0] == Manifest.permission.CAMERA) {<br> openCamera();<br> } else if (permissions[0] == Manifest.permission.WRITE_EXTERNAL_STORAGE) {<br> openAlbum();<br> }<br> }<br> }<br> @Override<br> protected void onActivityResult(int requestCode, int resultCode, Intent data) {<br> super.onActivityResult(requestCode, resultCode, data);<br> if (requestCode == CAMERA_CODE) {<br> if (resultCode == RESULT_OK) {<br> try {<br> //Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver()<br> // .openInputStream(mImageUri));<br> //img.setImageBitmap(bitmap);<br> //处理照相之后的结果并上传<br> uploadOk(mFile);<br> } catch (Exception e) {<br> e.printStackTrace();<br> }<br> }<br> } else if (requestCode == ALBUM_CODE) {<br> //相册<br> if (resultCode == RESULT_OK) {<br> Uri imageUri = data.getData();<br> //处理uri,7.0以后的fileProvider 把URI 以content provider 方式 对外提供的解析方法<br> File file = getFileFromUri(imageUri, this);<br>// String parent = file.getParent();<br>// List<String> filesAllName = getFilesAllName(parent);<br> Log.e("wy", "getParent: "+ filesAllName.get(0) );<br>// for (int i = 0; i <filesAllName.size() ; i++) {<br>// Log.e("wy", "onActivityResult: "+filesAllName.get(i) );<br>// File f = new File(parent, filesAllName.get(i));<br>// }<br> if (file.exists()) {<br> updateFile(file);<br> }<br> }<br> }<br> }<br> public List<String> getFilesAllName(String path) {<br> File file=new File(path);<br> File[] files=file.listFiles();<br> if (files == null){Log.e("error","空目录");return null;}<br> List<String> s = new ArrayList<>();<br> for(int i =0;i<files.length;i++){<br> s.add(files[i].getName());<br> }<br> return s;<br> }<br> public File getFileFromUri(Uri uri, Context context) {<br> if (uri == null) {<br> return null;<br> }<br> Log.e("wy", "getScheme: "+uri.getScheme() );<br> switch (uri.getScheme()) {<br> case "content":<br> return getFileFromContentUri(uri, context);<br> case "file":<br> return new File(uri.getPath());<br> default:<br> return null;<br> }<br> }<br> /**<br> * 通过内容解析中查询uri中的文件路径<br> */<br> private File getFileFromContentUri(Uri contentUri, Context context) {<br> if (contentUri == null) {<br> return null;<br> }<br> File file = null;<br> String filePath;<br> String[] filePathColumn = {MediaStore.MediaColumns.DATA};<br> ContentResolver contentResolver = context.getContentResolver();<br> Cursor cursor = contentResolver.query(contentUri, filePathColumn, null,<br> null, null);<br> if (cursor != null) {<br> cursor.moveToFirst();<br> int columnIndex = cursor.getColumnIndex(filePathColumn[0]);<br> filePath = cursor.getString(columnIndex);<br> Log.e("wy", "filePath: "+filePath);<br> cursor.close();<br> if (!TextUtils.isEmpty(filePath)) {<br> file = new File(filePath);<br> }<br> }<br> return file;<br> }<br> /**<br> * 文件上传<br> */<br> private void uploadOk(File file) {<br> }<br> private void updateFile(File file) {<br>//拍照获取的图片<br> fileArrayList.clear();<br> fileArrayList.add(file);<br> List<File> mFile = fileArrayList;<br>// 存到本地的图片<br>// String sdPath = getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/a/test.jpg";<br>// File mFile=new File(sdPath);<br> dialogShibie.setTitle("上传中");<br> dialogShibie.show();<br>// Log.e("wy1", "开始上传图片的时间: " + TimeUtil.stampToDate(System.currentTimeMillis() + ""));<br> RequestParams params = new RequestParams("http://192.168.176.119/uploadFile");<br>// params.setConnectTimeout(5000);<br> // 有上传文件时使用multipart表单, 否则上传原始文件流.<br> params.setMultipart(true);<br> // 上传文件方式 2 /mnt/internal_sd/FtrendCrashLog/th.jpg<br> params.addBodyParameter("files", mFile);<br>// params.addBodyParameter("file", bitmapUse);<br> Log.e("wy", "params: " + params);<br> org.xutils.common.Callback.Cancelable cancelable<br> = x.http().post(params, new org.xutils.common.Callback.CommonCallback<String>() {<br> @Override<br> public void onSuccess(String result) {<br> Log.e("wy1", "上传图片成功: " );<br> dialogShibie.dismiss();<br> Toast.makeText(x.app(), "上传图片成功", Toast.LENGTH_SHORT).show();<br> Log.e("wy", "result: " + result);<br> }<br> @Override<br> public void onError(Throwable ex, boolean isOnCallback) {<br> //Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();<br> if (ex instanceof HttpException) { // 网络错误<br> HttpException httpEx = (HttpException) ex;<br> int responseCode = httpEx.getCode();<br> String responseMsg = httpEx.getMessage();<br> String errorResult = httpEx.getResult();<br> Log.e("wy", "responseCode " +responseCode);<br> if (responseCode == 404) {<br> dialogShibie.dismiss();<br> Toast.makeText(x.app(), "ip地址错误", Toast.LENGTH_LONG).show();<br> }<br> // ...<br> } else { // 其他错误<br> // ...<br> }<br>// dialogShibie.dismiss();<br> Log.e("wy", "请求上传图片地址错误: " + ex.getMessage());<br>// Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();<br> }<br> @Override<br> public void onCancelled(CancelledException cex) {<br> Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();<br> }<br> @Override<br> public void onFinished() {<br> dialogShibie.dismiss();<br> Log.e("wy", "本次请求完全结束 ");<br> }<br> });<br> }<br> private File mFile;<br> private Uri mImageUri;<br> private void openCamera() {<br> //创建文件用于保存图片<br> mFile = new File(getExternalCacheDir(), System.currentTimeMillis() + ".jpg");<br> if (!mFile.exists()) {<br> try {<br> mFile.createNewFile();<br> } catch (IOException e) {<br> e.printStackTrace();<br> }<br> }<br> //适配7.0<br> if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {<br> mImageUri = Uri.fromFile(mFile);<br> } else {<br> //第二个参数要和清单文件中的配置保持一致<br> mImageUri = FileProvider.getUriForFile(this, "com.baidu.upload.provider", mFile);<br> }<br> //启动相机<br> Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);<br> intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);//将拍照图片存入mImageUri<br> startActivityForResult(intent, CAMERA_CODE);<br> }<br> private void takesD() {<br> //权限判断<br> if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)<br> == PackageManager.PERMISSION_GRANTED) {<br> openAlbum();<br> } else {<br> ActivityCompat.requestPermissions(this, new String[]{Manifest.permission<br> .WRITE_EXTERNAL_STORAGE}, 100);<br> }<br> }<br> private void openAlbum() {<br> Intent intent = new Intent(Intent.ACTION_PICK);<br> intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");<br> startActivityForResult(intent, ALBUM_CODE);<br> }<br> public List<File> saveBitmap() {<br> Log.e("wy", "开始保存");<br> //生成一个文件,存储我们将来拍照的照片<br>// String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/a/" ;<br> String sdPath = getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/a/";<br>// String sdPath = "/mnt/sdcard/Internal Memory" ;<br>// File file = new File(sdPath);<br>// Log.e("wy", "绝对文件路径: " + file.getAbsoluteFile());<br>// Log.e("wy", "文件名: " + file.getName());<br>// if (!file.exists()) {<br>// file.mkdirs();<br>// Log.e("wy", "创建文件夹,路径:" + file.getPath());<br>// }<br>// String mFileName = System.currentTimeMillis() + ".jpg";<br> String mFileName = "a.jpg";<br> String mFileName1 = "b.jpg";<br> String mFileName2 = "c.jpg";<br> String mFileName3 = "d.jpg";<br> String mFileName4 = "e.jpg";<br> Log.e("wy", "保存文件名称: " + mFileName);<br> File f = new File(sdPath, mFileName);<br> File f2 = new File(sdPath, mFileName1);<br> File f3 = new File(sdPath, mFileName2);<br> File f4 = new File(sdPath, mFileName3);<br> File f5 = new File(sdPath, mFileName4);<br> fileArrayList.clear();<br> fileArrayList.add(f);<br> fileArrayList.add(f2);<br> fileArrayList.add(f3);<br>// fileArrayList.add(f4);<br>// fileArrayList.add(f5);<br>// fileArrayList.add(f2);<br> return fileArrayList;<br> }<br> private void upload() {<br> //拍照获取的图片<br> List<File> mFile = saveBitmap();<br>// 存到本地的图片<br>// String sdPath = getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/a/test.jpg";<br>// File mFile=new File(sdPath);<br> dialogShibie.setTitle("上传中");<br> dialogShibie.show();<br>// Log.e("wy1", "开始上传图片的时间: " + TimeUtil.stampToDate(System.currentTimeMillis() + ""));<br> RequestParams params = new RequestParams("http://192.168.176.119/uploadFile");<br>// params.setConnectTimeout(5000);<br> // 有上传文件时使用multipart表单, 否则上传原始文件流.<br> params.setMultipart(true);<br> // 上传文件方式 2 /mnt/internal_sd/FtrendCrashLog/th.jpg<br> params.addBodyParameter("files", mFile);<br>// params.addBodyParameter("file", bitmapUse);<br> Log.e("wy", "params: " + params);<br> org.xutils.common.Callback.Cancelable cancelable<br> = x.http().post(params, new org.xutils.common.Callback.CommonCallback<String>() {<br> @Override<br> public void onSuccess(String result) {<br> Log.e("wy1", "上传图片成功: " );<br> dialogShibie.dismiss();<br>// Toast.makeText(x.app(), "查到任务ID", Toast.LENGTH_SHORT).show();<br> Log.e("wy", "result: " + result);<br> }<br> @Override<br> public void onError(Throwable ex, boolean isOnCallback) {<br> //Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();<br> if (ex instanceof HttpException) { // 网络错误<br> HttpException httpEx = (HttpException) ex;<br> int responseCode = httpEx.getCode();<br> String responseMsg = httpEx.getMessage();<br> String errorResult = httpEx.getResult();<br> Log.e("wy", "responseCode " +responseCode);<br> if (responseCode == 404) {<br> dialogShibie.dismiss();<br> Toast.makeText(x.app(), "ip地址错误", Toast.LENGTH_LONG).show();<br> }<br> // ...<br> } else { // 其他错误<br> // ...<br> }<br>// dialogShibie.dismiss();<br> Log.e("wy", "请求上传图片地址错误: " + ex.getMessage());<br>// Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();<br> }<br> @Override<br> public void onCancelled(CancelledException cex) {<br> Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();<br> }<br> @Override<br> public void onFinished() {<br> dialogShibie.dismiss();<br> Log.e("wy", "本次请求完全结束 ");<br> }<br> });<br> }<br>} |
以上就是 直播源码搭建教程之获取相册中的指定一个图片后上传实现的相关代码,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现