Android文件上传至服务器

项目演示及讲解

优酷  http://v.youku.com/v_show/id_XODk5NjkwOTg4.html

爱奇艺  http://www.iqiyi.com/w_19rs1v2m15.html#vfrm=8-7-0-1

土豆  http://www.tudou.com/programs/view/fv0H93IHfhM

项目下载

1、手机端选择文件上传至服务器端

http://download.csdn.net/detail/u010134178/8457679

2、手机端拍照上传至服务器端

http://download.csdn.net/detail/u010134178/8457673

3、总下载地址

http://down.51cto.com/7851921/up

这些都是需要积分的,如果积分不够的话发送到我邮箱[email protected]我直接把项目发送过来

大家在调试的同时一定要注意

1、网络下载、上传这些操作,就是耗时的操作,要另外开线程操作,不能放到主线程里面。

2、网络下载、上传里面不能有ui操作,不能在里面显示ui。就是不能在子线程里面操作UI。如果操作完毕ui提示用户等操作,可以使用利用handler结合Thread更新UI,或者AsyncTask异步更新UI。

3、上传到本地Tomcat服务器,要关闭防火墙

接下来将给出两个项目部分代码,当然两个项目都有一个工具类HttpPost

public class HttpPost {
	/**
	 * 通过拼接的方式构造请求内容,实现参数传输以及文件传输
	 * 
	 * @param acti
	 *            .nUrl
	 * @param params
	 * @param files
	 * @return
	 * @throws IOException
	 */
	public static String post(String actionUrl, Map<String, String> params, Map<String, File> files) throws IOException {

		String BOUNDARY = java.util.UUID.randomUUID().toString();
		String PREFIX = "--", LINEND = "\r\n";
		String MULTIPART_FROM_DATA = "multipart/form-data";
		String CHARSET = "UTF-8";

		URL uri = new URL(actionUrl);
		HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
		conn.setReadTimeout(5 * 1000); // 缓存的最长时间
		conn.setDoInput(true);// 允许输入
		conn.setDoOutput(true);// 允许输出
		conn.setUseCaches(false); // 不允许使用缓存
		conn.setRequestMethod("POST");
		conn.setRequestProperty("connection", "keep-alive");
		conn.setRequestProperty("Charsert", "UTF-8");
		conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);

		// 首先组拼文本类型的参数
		StringBuilder sb = new StringBuilder();
		for (Map.Entry<String, String> entry : params.entrySet()) {
			sb.append(PREFIX);
			sb.append(BOUNDARY);
			sb.append(LINEND);
			sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINEND);
			sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
			sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
			sb.append(LINEND);
			sb.append(entry.getValue());
			sb.append(LINEND);
		}

		DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
		outStream.write(sb.toString().getBytes());
		// 发送文件数据
		if (files != null)
			for (Map.Entry<String, File> file : files.entrySet()) {
				StringBuilder sb1 = new StringBuilder();
				sb1.append(PREFIX);
				sb1.append(BOUNDARY);
				sb1.append(LINEND);
				sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getKey() + "\"" + LINEND);
				sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);
				sb1.append(LINEND);
				outStream.write(sb1.toString().getBytes());

				InputStream is = new FileInputStream(file.getValue());
				byte[] buffer = new byte[1024];
				int len = 0;
				while ((len = is.read(buffer)) != -1) {
					outStream.write(buffer, 0, len);
				}

				is.close();
				outStream.write(LINEND.getBytes());
			}

		// 请求结束标志
		byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
		outStream.write(end_data);
		outStream.flush();
		// 得到响应码
		int res = conn.getResponseCode();
		InputStream in = conn.getInputStream();
		if (res == 200) {
			int ch;
			StringBuilder sb2 = new StringBuilder();
			while ((ch = in.read()) != -1) {
				sb2.append((char) ch);
			}
		}
		outStream.close();
		conn.disconnect();
		return in.toString();

	}

}

手机拍照上传至服务器主要代码

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) {
		}
	}

选择文件上传至服务器主要代码

/******************************************************/
		private String fun(String msg){
		int i = msg.length();
		int j = msg.lastIndexOf("/") + 1;

		String a = msg.substring(j, i) ;
		System.out.println(a);
		return a;
		}
	/******************************************************/

	private void uploadFile() {
		show.setVisibility(View.VISIBLE);
		new Thread() {
			@Override
			public void run() {

				Message msg = Message.obtain();

				// 服务器的访问路径
				String uploadUrl = "http://192.168.0.104:8080/UploadPhoto1/UploadServlet";
				Map<String, File> files = new HashMap<String, File>();

				String name = fun(picturePath);
				files.put(name, new File(picturePath));
				//files.put("test.jpg", new File(picturePath));
				Log.d("str--->>>", picturePath);
				try {
					String str = HttpPost.post(uploadUrl, new HashMap<String,String>(), files);
					System.out.println("str--->>>" + str);
					msg.what = SUCCESS;
				} catch (Exception e) {
					msg.what = FAILD;
				}
				mHandler.sendMessage(msg);

			}
		}.start();
	}
时间: 2024-10-04 11:01:12

Android文件上传至服务器的相关文章

Android文件上传-本地+服务器一条龙分析

本地: 先看下项目结构 MainActivity.java package com.huxq.uploadexample; import java.io.File; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Environment; import

在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器

最近做的一个项目中,有这样一个要求,在浏览器中调用系统的拍照功能或者选择文件,然后将文件上传到服务器,类似修改头像.        简单而言,就是在一个html页面中有这样一段代码 <input class="filePrew" type="file" capture="camera" accept="image/*" name="image"> 刚开始的时候,没有感觉很难的,因为在UC浏览器.

.net 文件上传到服务器【转】

最忌你在一个文档管理系统,包裹文件上传下载等. http://blog.csdn.net/pmy_c_l/article/details/73743843 官方链接:https://msdn.microsoft.com/zh-cn/library/system.io.filestream.read.aspx /// <summary> /// 读取本地文件上传到服务器 /// </summary> /// <param name="localfilepath&quo

c# 单个文件上传至服务器

#region 单个文件上传至服务器 /// <summary> /// 单个文件上传至服务器 /// </summary> /// <param name="uriAddress">接收文件资源的URI, 例如: http://xxxx/Upload.aspx?UID=11111</param> /// <param name="filePath">要发送的资源文件, 例如: @"D:\work

C# winform把本地文件上传到服务器上,和从服务器上下载文件

昨天在做项目过程中遇到需要把本地文件上传到服务器上的问题,在这里记录一下,方便大家互相学习! /// <summary> /// 上传文件方法/// </summary> /// <param name="filePath">本地文件所在路径(包括文件)</param> /// <param name="serverPath">文件存储服务器路径(包括文件)</param> public voi

文件上传至服务器

使用文件上传至服务器需要导入两包commons-fileupload-1.2.2.jar与commons-io-2.4.jar 本文的servlet使用的是 servlet3.0注解配置,   不用写web.xml 文件了 建立文件时使用javaEE6.0 支持servlet3.0 value的值就是访问路径 urlPatterns的值也是访问路径  例如 @WebServlet(name="DemoServlet3",value="/demoServlet3")

客户端的文件上传到服务器,服务器返回文件的路径

客户端的文件上传到服务器,服务器返回文件的路径 返回信息,客户端将文件保存 客户端: <?php header('content-type:text/html;charset=utf8'); $url = 'http://192.168.1.118/legcc/aaa.php';//访问的服务器的地址 $curl = curl_init(); $path = 'D:\www\ceshi\a02.jpeg';//客户端文件的绝对路径 $source = file_get_contents($pat

Linux 文件上传Linux服务器

进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示出文本和基本的图形输出.众所周知,如今的Linux环境已经发生了巨大变化,所有的Linux发行版都配备了某种类型的图形化桌面环境.但是,如果向输入shell命令,仍然需要使用文本显示来访问shell的CLI. Linux发行版通常使用Ctrl+Alt组合键配合F1或F7来进入图形界面.Ubuntu使

android和struts2实现android文件上传

1.开发准备如下2个工具类 package org.lxh.util; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.URL; import java.util.Map; /** * 上传文件到服务器 * * @auth