ut.activity_main); button1 = findViewById(R.id.test); button2 = findViewById(R.id.test2); imageView = findViewById(R.id.image); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { selectImage(); } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { uploadImage(); } }); } private void selectImage() { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent, 1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == RESULT_OK) { Uri uri = data.getData(); String path = getRealPathFromURI(uri); Bitmap bitmap = BitmapFactory.decodeFile(path); Message message = handler.obtainMessage(); message.obj = bitmap; handler.sendMessage(message); } } private String getRealPathFromURI(Uri contentUri) { Cursor cursor = getContentResolver().query(contentUri, null, null, null, null); if (cursor != null) { int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } return null; } private void uploadImage() { final String filePath = getRealPathFromURI(imageView.getDrawable().toBitmap()); File file = new File(filePath); RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpeg"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestBody); OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(5, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .build(); Request request = new Request.Builder() .url("http://your_server_url/upload.php") .post(body) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e("Upload Error", e.getMessage()); } @Override public void onResponse(Call call, Response response) throws IOException { if (!response.isSuccessful()) { Log.e("Upload Status", "Error: " + response.code()); } else { Log.i("Upload Status", "Success"); } } }); } } 这段代码展示了如何在Android应用中实现图片上传至PHP服务器的功能。我们看到布局文件`activity_main.xml`,它包含两个按钮(button1和button2)以及一个ImageView。button1用于选择图片,button2用于上传图片。 在`MainActivity`中,我们为这两个按钮设置了点击事件监听器。当用户点击button1时,调用`selectImage()`方法,启动一个Intent来让用户从相册中选择图片。选择图片后,`onActivityResult()`会返回所选图片的URI,我们将其转换为实际路径,并加载到ImageView中。 当用户点击button2时,调用`uploadImage()`方法。这个方法首先获取ImageView中的图片路径,然后创建一个RequestBody对象,用于封装图片文件。接着,创建一个MultipartBody.Part对象,这是HTTP请求中用于上传多部分数据的格式。在这里,我们将图片作为表单字段"image"上传。 接下来,我们创建一个OkHttpClient实例,设置超时时间。然后构建一个POST请求,指定服务器的URL和上传的图片数据。通过OkHttpClient的enqueue方法异步发送请求。在回调中,我们处理上传响应,如果请求成功,会在日志中打印“Success”。 在PHP服务器端,你需要一个名为`upload.php`的脚本来接收并处理上传的图片。这个脚本通常会保存图片到服务器的某个目录,并可能对上传的文件进行验证,例如检查文件类型、大小等。不过,这部分代码没有给出,需要你自己根据实际需求编写。 总结一下,这个实例代码涵盖了以下几个关键知识点: 1. 使用Intent选择图片:通过ACTION_GET_CONTENT启动系统相册。 2. 获取图片的实际路径:`getRealPathFromURI()`方法。 3. 使用OkHttp进行网络请求:创建OkHttpClient实例,设置超时,构建Request和RequestBody。 4. 多部分上传:利用MultipartBody.Part上传图片文件。 5. 异步请求处理:通过OkHttp的enqueue方法发送非阻塞请求,使用Callback处理结果。 以上就是Android应用中将图片上传到PHP服务器的具体步骤和相关技术点。需要注意的是,实际应用中还需要处理各种异常情况,如网络连接失败、服务器返回错误等。此外,为了用户隐私和安全,应尽量避免在代码中硬编码服务器URL,而是将其存储在配置文件或使用环境变量。
- 粉丝: 8
- 资源: 959
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 点云数据处理与开发基础教程
- (源码)基于 JavaWeb 的超市收银系统.zip
- (源码)基于Vue和Cordova的移动端在线选座购票系统.zip
- (源码)基于C++的simpleDB数据库管理系统.zip
- (源码)基于Arduino的RTOSMMESGU实时操作系统项目.zip
- (源码)基于STM32和TensorFlow Lite框架的微语音识别系统.zip
- (源码)基于C#的支付系统集成SDK.zip
- (源码)基于Spring Cloud和Spring Boot的微服务架构管理系统.zip
- (源码)基于物联网的自动化开门控制系统 iotsaDoorOpener.zip
- (源码)基于ROS的Buddy Robot舞蹈控制系统.zip