Android实现上传图片至java服务器

这几天有做到一个小的案例,手机拍照、相册照片上传到服务器。客户端和服务器的代码都贴出来:

客户端

AndroidManifest.xml添加以下权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

客户端的上传图片activity_upload.xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/activity_main"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">

 <ImageView
  android:id="@+id/imageView"
  android:layout_width="match_parent"
  android:layout_height="300dp"/>

 <EditText
  android:id="@+id/editText"
  android:layout_width="match_parent"
  android:layout_height="42dp"
  android:layout_margin="16dp"
  android:background="@drawable/edit_text_bg"/>

 <Button
  android:id="@+id/choose_image"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="选择图片"/>

 <Button
  android:id="@+id/upload_image"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="上传图片"/>

</LinearLayout>

UploadActivity.java界面代码

package com.eric.uploadimage;

import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import java.io.ByteArrayOutputStream;
import cz.msebera.android.httpclient.Header;

@SuppressLint("NewApi")
public class UploadActivity extends AppCompatActivity implements View.OnClickListener {

 private EditText editTextName;
 private ProgressDialog prgDialog;

 private int RESULT_LOAD_IMG = 1;
 private RequestParams params = new RequestParams();
 private String encodedString;
 private Bitmap bitmap;
 private String imgPath;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  prgDialog= new ProgressDialog(this);
  prgDialog.setCancelable(false);

  editTextName = (EditText) findViewById(R.id.editText);
  findViewById(R.id.choose_image).setOnClickListener(this);
  findViewById(R.id.upload_image).setOnClickListener(this);
 }

 @Override
 public void onClick(View view) {
  switch (view.getId()) {
   case R.id.choose_image:
    loadImage();
    break;
   case R.id.upload_image:
    uploadImage();
    break;
  }
 }

 public void loadImage() {
  //这里就写了从相册中选择图片,相机拍照的就略过了
  Intent galleryIntent = new Intent(Intent.ACTION_PICK,
  android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  startActivityForResult(galleryIntent, RESULT_LOAD_IMG);
 }

 //当图片被选中的返回结果
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  try {
   if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK && null != data) {

    Uri selectedImage = data.getData();
    String[] filePathColumn = { MediaStore.Images.Media.DATA };

    // 获取游标
    Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
    cursor.moveToFirst();

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    imgPath = cursor.getString(columnIndex);
    cursor.close();
    ImageView imgView = (ImageView) findViewById(R.id.imageView);
    imgView.setImageBitmap(BitmapFactory.decodeFile(imgPath));
   } else {
    Toast.makeText(this, "You haven't picked Image",
      Toast.LENGTH_LONG).show();
   }
  } catch (Exception e) {
   Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG).show();
  }
 }

 //开始上传图片
 private void uploadImage() {
  if (imgPath != null && !imgPath.isEmpty()) {
   prgDialog.setMessage("Converting Image to Binary Data");
   prgDialog.show();
   encodeImagetoString();
  } else {
   Toast.makeText(getApplicationContext(), "You must select image from gallery before you try to upload",
     Toast.LENGTH_LONG).show();
  }
 }

 public void encodeImagetoString() {
  new AsyncTask<Void, Void, String>() {

   protected void onPreExecute() {

   };

   @Override
   protected String doInBackground(Void... params) {
    BitmapFactory.Options options = null;
    options = new BitmapFactory.Options();
    options.inSampleSize = 3;
    bitmap = BitmapFactory.decodeFile(imgPath,
      options);
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    // 压缩图片
    bitmap.compress(Bitmap.CompressFormat.PNG, 50, stream);
    byte[] byte_arr = stream.toByteArray();
    // Base64图片转码为String
    encodedString = Base64.encodeToString(byte_arr, 0);
    return "";
   }

   @Override
   protected void onPostExecute(String msg) {
    prgDialog.setMessage("Calling Upload");
    // 将转换后的图片添加到上传的参数中
    params.put("image", encodedString);
    params.put("filename", editTextName.getText().toString());
    // 上传图片
    imageUpload();
   }
  }.execute(null, null, null);
 }

 public void imageUpload() {
  prgDialog.setMessage("Invoking JSP");
  String url = "http://172.18.2.73:8080/upload/uploadimg.jsp";
  AsyncHttpClient client = new AsyncHttpClient();
  client.post(url, params, new AsyncHttpResponseHandler() {
   @Override
   public void onSuccess(int statusCode, Header[] headers, byte[] bytes) {
    prgDialog.hide();
    Toast.makeText(getApplicationContext(), "upload success", Toast.LENGTH_LONG).show();
   }

   @Override
   public void onFailure(int statusCode, Header[] headers, byte[] bytes, Throwable throwable) {
    prgDialog.hide();
    if (statusCode == 404) {
     Toast.makeText(getApplicationContext(),
       "Requested resource not found", Toast.LENGTH_LONG).show();
    }
    // 当 Http 响应码'500'
    else if (statusCode == 500) {
     Toast.makeText(getApplicationContext(),
       "Something went wrong at server end", Toast.LENGTH_LONG).show();
    }
    // 当 Http 响应码 404, 500
    else {
     Toast.makeText(
       getApplicationContext(), "Error Occured n Most Common Error: n1. Device " +
         "not connected to Internetn2. Web App is not deployed in App servern3." +
         " App server is not runningn HTTP Status code : "
         + statusCode, Toast.LENGTH_LONG).show();
    }
   }
  });
 }

 @Override
 protected void onDestroy() {
  super.onDestroy();
  if (prgDialog != null) {
   prgDialog .dismiss();
  }
 }
}

服务端

这里用是Intellij Idea 2016.3.1+Tomcat 搭建的本地服务器,前篇文章有介绍具体的搭建步骤。
服务端项目结构:UploadImage.javauploadimg.jsp`、lib库

UploadImage.java 类

public class UploadImage {

 public static void convertStringtoImage(String encodedImageStr, String fileName) {

  try {
   // Base64解码图片
   byte[] imageByteArray = Base64.decodeBase64(encodedImageStr);

   //
   FileOutputStream imageOutFile = new FileOutputStream("D:/uploads/" + fileName+".jpg");
   imageOutFile.write(imageByteArray);

   imageOutFile.close();

   System.out.println("Image Successfully Stored");
  } catch (FileNotFoundException fnfe) {
   System.out.println("Image Path not found" + fnfe);
  } catch (IOException ioe) {
   System.out.println("Exception while converting the Image " + ioe);
  }
 }
}

uploadimg.jsp 文件

<%@page import="com.eric.UploadImage"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
 <title>图片上传</title>
</head>
<body>
<%
 String imgEncodedStr = request.getParameter("image");
 String fileName = request.getParameter("filename");
 System.out.println("Filename: "+ fileName);
 if(imgEncodedStr != null){
  UploadImage.convertStringtoImage(imgEncodedStr, fileName);
  out.print("Image upload complete, Please check your directory");
 } else{
  out.print("Image is empty");
 }
%>
</body>
</html>

运行结果:

客户端

服务端

觉得还不错的小伙伴们点个赞,鼓励一下!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 通过Base64上传图片到服务器实现实例

    Android 通过Base64上传图片到服务器 之前做上传图片是采用HttpServlet上传,不过用了一下Base64上传图片后,感觉比HttpServlet方便很多,大家也可以跟着尝试一下. 前台图片处理:(传Bitmap对象即可) /** * 通过Base32将Bitmap转换成Base64字符串 * @param bit * @return */ public String Bitmap2StrByBase64(Bitmap bit){ ByteArrayOutputStream bo

  • Android开发中调用系统相册上传图片到服务器OPPO等部分手机上出现短暂的显示桌面问题的解决方法

    要原因是主体样式设置的问题:这里把appTheme设置一个style即可: <item name="android:windowBackground">@color/white</item> <!--下面这个属性很重要,有时候会出现某些机型在调用系统相册的时候,短暂的出现手机桌面现象--> <item name="android:windowIsTranslucent">false</item> <i

  • Android使用post方式上传图片到服务器的方法

    本文实例讲述了Android使用post方式上传图片到服务器的方法.分享给大家供大家参考,具体如下: /** * 上传文件到服务器类 * * @author tom */ public class UploadUtil { private static final String TAG = "uploadFile"; private static final int TIME_OUT = 10 * 1000; // 超时时间 private static final String CH

  • Android异步上传图片到PHP服务器

    原理 Android客户端模拟一个HTTP的Post请求到服务器端,服务器端接收相应的Post请求后,返回响应信息给给客户端. 背景 网上很多上传到java服务器上的,找了好久,找到了上传到php的了,思路跟我当初想的差不多,就是POST过去.废话不多说,直接上图看代码. php代码 <?php $target_path = "./upload/";//接收文件目录 $target_path = $target_path . basename( $_FILES['uploaded

  • Android实现上传图片至java服务器

    这几天有做到一个小的案例,手机拍照.相册照片上传到服务器.客户端和服务器的代码都贴出来: 客户端 AndroidManifest.xml添加以下权限 <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.CAMERA"/> <uses-permissionandroid

  • android studio实现上传图片到java服务器

    本文实例为大家分享了android studio上传图片到java服务器的具体代码,供大家参考,具体内容如下 1.build.gradle配置(增加) dependencies{      implementation 'com.squareup.okhttp3:okhttp:4.9.0'      implementation 'org.conscrypt:conscrypt-android:2.5.1'         } 2.AndroidManifest.xml配置权限 <uses-pe

  • Java/Android 实现简单的HTTP服务器

    目前在对Android的代码进行功能测试的时候,需要服务器返回一个数据来测试整个流程是否正确.不希望引入第三方的JAR包,因此需要一个特别简单的HTTP服务器. 网上查询了一下,找到可用的代码如下: import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx

  • android 上传文件到服务器代码实例

    android对于上传文件,还是很简单的,和java里面的上传都是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要一些content-type这些参数的配置!  如果这些都弄好了,上传就很简单了!   下面是我写的一个上传的工具类: 复制代码 代码如下: package com.spring.sky.image.upload.network; import java.io.DataOutputStream;import java.io.File;import java.io.

  • android利用websocket协议与服务器通信

    最近做一个项目,需求中需要服务器主动推送消息到客户端.这样的话一般的http连接就不能使用了.博主问了个朋友,向我推荐websocket协议,特此测试了一下,发现效果很好. android本身没有websocket的库,需要自己下载 ,下载地址. 客户端代码: 界面布局自己写,很简单的两个button package com.example.test; import com.example.test.R; import android.app.Activity; import android.o

  • android传送照片到FTP服务器的实现代码

    本文实例为大家分享了android传送照片到FTP服务器的具体代码,供大家参考,具体内容如下 在安卓环境下可以使用,在java环境下也可以使用,本人先在Java环境下实现了功能,然后移植到了安卓手机上,其它都是一样的. package com.photo; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; im

  • Android实现上传图片功能

    本文实例为大家分享了Android实现上传图片功能的具体代码,供大家参考,具体内容如下 设定拍照返回的图片路径 /**      * 设定拍照返回的图片路径      * @param image 图片路径      * @param i 约定值      */     protected void image(String image, int i) {         //创建file对象,用于存储拍照后的图片,这也是拍照成功后的照片路径         outputImage = new

  • Java服务器处理图片上传的方法

    本文实例为大家分享了Java服务器处理图片上传的具体代码,供大家参考,具体内容如下 一.简述 第一:浏览器上传图片实现: 第二:微信小程序上传图片实现: 二.图片上传功能实现 1.处理H5的单文件上传实现: package cn.ncist.tms.attachment.controller;   import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.H

  • Android发送xml数据给服务器的方法

    本文实例讲述了Android发送xml数据给服务器的方法.分享给大家供大家参考.具体如下: 一.发送xml数据: public static void main(String[] args) throws Exception { String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><videos><video><title>中国</title&

随机推荐