在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → Android端拍照上传至服务器(含服务器端源码)

Android端拍照上传至服务器(含服务器端源码)

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:2.58M
  • 下载次数:53
  • 浏览次数:478
  • 发布时间:2016-07-21
  • 实例类别:Android平台开发
  • 发 布 人:lllllllllllll
  • 文件格式:.rar
  • 所需积分:2
 相关标签: Android 拍照 上传 服务器 服务

实例介绍

【实例简介】

【实例截图】

【核心代码】

android端代码:

package com.example.take_photo_upload;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

	private static final int PHOTO_CAPTURE = 0x11;
	private static String photoPath = "/sdcard/AnBo/";
	private static String photoName = photoPath   "laolisb.jpg";	
	Uri imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "image.jpg"));//第二个参数是临时文件,在后面将会被修改
	private Button photo, sc_photo;//拍照与下载
	private ImageView img_photo;//显示图片
	private String newName = "laoli.jpg";
	/*
	 * 这里的代码应该有问题
	 */
	private String uploadFile = "/sdcard/AnBo/laolisb.jpg";
	private String actionUrl = "http://192.168.0.104:8080/UploadPhoto1/UploadServlet";// private String actionUrl = "http://192.168.0.104:8080/File/UploadAction";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		photo = (Button) findViewById(R.id.photo);
		sc_photo = (Button) findViewById(R.id.sc_photo);
		img_photo = (ImageView) findViewById(R.id.imt_photo);
		
		/*
		 *  android.os.NetworkOnMainThreadException
		 *  耗时操作,加如下代码,可在主线程中进行,但不推荐
		 */		
//		StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
//		StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath().build());
		sc_photo.setOnClickListener(new Sc_photo());
		photo.setOnClickListener(new Photo());
	}

	class Sc_photo implements View.OnClickListener {

		@Override
		public void onClick(View arg0) {
			// TODO Auto-generated method stub
			dialog();
		}

	}

	class Photo implements View.OnClickListener {

		@Override
		public void onClick(View v) {
			
			Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
			//"/sdcard/AnBo/";
			File file = new File(photoPath);
			if (!file.exists()) { // 检查图片存放的文件夹是否存在
				file.mkdir(); // 不存在的话 创建文件夹
			}
			//photoPath   "laolisb.jpg"
			File photo = new File(photoName);
			imageUri = Uri.fromFile(photo);
			intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); // 这样就将文件的存储方式和uri指定到了Camera应用中
			startActivityForResult(intent, PHOTO_CAPTURE);

		}

	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		String sdStatus = Environment.getExternalStorageState();
		switch (requestCode) {
		case PHOTO_CAPTURE:
			if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
				Log.i("内存卡错误", "请检查您的内存卡");
			} else {
				BitmapFactory.Options op = new BitmapFactory.Options();
				// 设置图片的大小
				Bitmap bitMap = BitmapFactory.decodeFile(photoName);
				int width = bitMap.getWidth();
				int height = bitMap.getHeight();
				// 设置想要的大小
				int newWidth = 480;
				int newHeight = 640;
				// 计算缩放比例
				float scaleWidth = ((float) newWidth) / width;
				float scaleHeight = ((float) newHeight) / height;
				// 取得想要缩放的matrix参数
				Matrix matrix = new Matrix();
				matrix.postScale(scaleWidth, scaleHeight);
				// 得到新的图片
				bitMap = Bitmap.createBitmap(bitMap, 0, 0, width, height, matrix, true);

				// canvas.drawBitmap(bitMap, 0, 0, paint)
				// 防止内存溢出
				op.inSampleSize = 4; // 这个数字越大,图片大小越小.

				Bitmap pic = null;
				pic = BitmapFactory.decodeFile(photoName, op);
				img_photo.setImageBitmap(pic); // 这个ImageView是拍照完成后显示图片
				FileOutputStream b = null;
				;
				try {
					b = new FileOutputStream(photoName);
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}
				if (pic != null) {
					pic.compress(Bitmap.CompressFormat.JPEG, 50, b);
				}
			}
			break;
		default:
			return;
		}
	}

	protected void dialog() {
		
		AlertDialog.Builder builder = new Builder(MainActivity.this);
		builder.setMessage("确认上传图片吗?");

		builder.setTitle("提示");

		builder.setPositiveButton("确认", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				new Thread(new Runnable() {

					@Override
					public void run() {
						uploadPhoto();
						//uploadFile();
					}
				}).start();
			}
		});
		builder.setNegativeButton("取消", new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();

			}
		});
		builder.create().show();
	}

	//第二种上传方式
	public void uploadPhoto() {
		
		Map<String, String> params = new HashMap<String, String>();
		params.put("strParamName", "strParamValue");
		Map<String, File> files = new HashMap<String, File>();
		files.put(System.currentTimeMillis() ".jpg", new File(uploadFile));//uploadFile = "/sdcard/AnBo/laolisb.jpg";
		try {
			String str = HttpPost.post(actionUrl, params, files);
			System.out.println("str--->>>"   str);
		} catch (Exception e) {
		}
	}

	/* 上传文件至Server的方法 */
	private void uploadFile() {
		System.out.print("正在发送请求!");
		String end = "\r\n";
		String twoHyphens = "--";
		String boundary = "*****";

		Log.d("Index_Activity", "jsdj");
		try {
			URL url = new URL(actionUrl);

			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			/* 允许Input、Output,不使用Cache */
			System.out.println(con.getResponseCode()   "*********");
			con.setDoInput(true);
			con.setDoOutput(true);
			con.setUseCaches(false);
			/* 设置传送的method=POST */
			con.setRequestMethod("POST");
			/* setRequestProperty */
			con.setRequestProperty("Connection", "Keep-Alive");
			con.setRequestProperty("Charset", "UTF-8");
			con.setRequestProperty("Content-Type", "multipart/form-data;boundary="   boundary);
			/* 设置DataOutputStream */
			DataOutputStream ds = new DataOutputStream(con.getOutputStream());
			ds.writeBytes(twoHyphens   boundary   end);
			ds.writeBytes("Content-Disposition: form-data; "   "name=\"file1\";filename=\""   newName   "\""   end);
			ds.writeBytes(end);
			/* 取得文件的FileInputStream */
			FileInputStream fStream = new FileInputStream(uploadFile);
			/* 设置每次写入1024bytes */
			System.out.print("已经找到数据正在发送!");
			int bufferSize = 1024 * 10;
			byte[] buffer = new byte[bufferSize];
			int length = -1;
			/* 从文件读取数据至缓冲区 */
			while ((length = fStream.read(buffer)) != -1) {
				/* 将资料写入DataOutputStream中 */
				ds.write(buffer, 0, length);
			}
			ds.writeBytes(end);
			ds.writeBytes(twoHyphens   boundary   twoHyphens   end);
			/* close streams */
			fStream.close();
			ds.flush();
			/* 取得Response内容 */
			InputStream is = con.getInputStream();
			int ch;
			StringBuffer b = new StringBuffer();
			while ((ch = is.read()) != -1) {
				b.append((char) ch);
			}
			/* 将Response显示于Dialog */
			 showDialog("上传成功");
			/* 关闭DataOutputStream */
			ds.close();
		} catch (Exception e) {
			Log.d("OK", "jsdj");
			System.out.print("网络出现异常!");
			// showDialog("上传失败");
			e.printStackTrace();
		}
	}

	/* 显示Dialog的method */
	private void showDialog(String mess) {
		new AlertDialog.Builder(MainActivity.this).setTitle("提示").setMessage(mess).setNegativeButton("确定", new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
			}
		}).show();
	}

}

服务器端代码:

package com.upload.servlet;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;

/**
 * Servlet implementation class UploadServlet
 */
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * Default constructor.
	 */
	public UploadServlet() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		RequestContext req = new ServletRequestContext(request);
		if (FileUpload.isMultipartContent(req)) {
			DiskFileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload fileUpload = new ServletFileUpload(factory);
			fileUpload.setFileSizeMax(1024 * 1024 * 1024);

			List items = new ArrayList();
			try {
				items = fileUpload.parseRequest(request);
			} catch (Exception e) {

			}

			Iterator it = items.iterator();
			while (it.hasNext()) {
				FileItem fileItem = (FileItem) it.next();
				if (fileItem.isFormField()) {
					System.out.println(fileItem.getFieldName()   " "   fileItem.getName()   " "   new String(fileItem.getString().getBytes("ISO-8859-1"), "GBK"));
				} else {
					System.out.println(fileItem.getFieldName()   " "   fileItem.getName()   " "   fileItem.isInMemory()   " "   fileItem.getContentType()   " "   fileItem.getSize());
					if (fileItem.getName() != null && fileItem.getSize() != 0) {
						File fullFile = new File(fileItem.getName());
						File newFile = new File("F:\\upload\\"   fullFile.getName());
						try {
							fileItem.write(newFile);
						} catch (Exception E) {

						}
					} else {
						System.out.println("no file choosen or empty file");
					}
				}
			}
		}
	}

}

实例下载地址

Android端拍照上传至服务器(含服务器端源码)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警