在做android开发的时候,有时你会用到图片的上传功能,在我的android项目中,我是选中图片,点击上传多张图片

android客户端上传图片部分的代码如下:

package com.example.myphotos.utils;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.UUID;import android.util.Log;public class UploadUtil {private static final String TAG = "uploadFile";private static final int TIME_OUT = 10 * 1000; // 超时时间private static final String CHARSET = "utf-8"; // 设置编码/** * 上传文件到服务器 *  * @param file *            需要上传的文件 * @param RequestURL *            请求的rul * @return 返回响应的内容 */public static int uploadFile(File file, String RequestURL) {int res = 0;String result = null;String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成String PREFIX = "--", LINE_END = "\r\n";String CONTENT_TYPE = "multipart/form-data"; // 内容类型try {URL url = new URL(RequestURL);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setReadTimeout(TIME_OUT);conn.setConnectTimeout(TIME_OUT);conn.setDoInput(true); // 允许输入流conn.setDoOutput(true); // 允许输出流conn.setUseCaches(false); // 不允许使用缓存conn.setRequestMethod("POST"); // 请求方式conn.setRequestProperty("Charset", CHARSET); // 设置编码conn.setRequestProperty("connection", "keep-alive");conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary="+ BOUNDARY);if (file != null) {/** * 当文件不为空时执行上传 */DataOutputStream dos = new DataOutputStream(conn.getOutputStream());StringBuffer sb = new StringBuffer();sb.append(PREFIX);sb.append(BOUNDARY);sb.append(LINE_END);/** * 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件 * filename是文件的名字,包含后缀名 */sb.append("Content-Disposition: form-data; name=\"file\"; filename=\""+ file.getName() + "\"" + LINE_END);sb.append("Content-Type: application/octet-stream; charset="+ CHARSET + LINE_END);sb.append(LINE_END);dos.write(sb.toString().getBytes());InputStream is = new FileInputStream(file);byte[] bytes = new byte[1024];int len = 0;while ((len = is.read(bytes)) != -1) {dos.write(bytes, 0, len);}is.close();dos.write(LINE_END.getBytes());byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes();dos.write(end_data);dos.flush();/** * 获取响应码 200=成功 当响应成功,获取响应的流 */res = conn.getResponseCode();Log.e(TAG, "response code:" + res);if (res == 200) {Log.e(TAG, "request success");InputStream input = conn.getInputStream();StringBuffer sb1 = new StringBuffer();int ss;while ((ss = input.read()) != -1) {sb1.append((char) ss);}result = sb1.toString();Log.e(TAG, "result : " + result);} else {Log.e(TAG, "request error");}}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return res;}}


服务器段的代码如下:

服务器端用的Struts2,网上基本上都是Servlet,所以我就把Struts2的写出来,供大家学习

package www.csdn.image;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Random;import javax.servlet.ServletInputStream;import javax.servlet.http.HttpServletRequest;import org.apache.commons.fileupload.DiskFileUpload;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;/** * ImagesAction 2013-6-18 下午9:02:58 *  * @author 乔晓松 *  */public class ImagesAction extends ActionSupport {/** *  */private static final long serialVersionUID = 1L;public List<String> list = new ArrayList<String>();private File file;private String fileContentType;private String fileFileName;public File getFile() {return file;}public void setFile(File file) {this.file = file;}public String getFileContentType() {return fileContentType;}public void setFileContentType(String fileContentType) {this.fileContentType = fileContentType;}public String getFileFileName() {return fileFileName;}public void setFileFileName(String fileFileName) {this.fileFileName = fileFileName;}public List<String> getList() {return list;}public String httpAllImages() {String path = ServletActionContext.getServletContext().getRealPath("images");// System.out.println(path);File filePath = new File(path);File[] files = filePath.listFiles();for (int i = 0; i < files.length; i++) {File file = files[i];if (!file.isDirectory()) {String fileName = file.getName();String img = fileName.substring(fileName.lastIndexOf(".") + 1);if ("jpg".equals(img) || "jpeg".equals(img)|| "gif".equals(img) || "png".equals(img)) {list.add(fileName);}}}System.out.println(list.size());return "images";}@SuppressWarnings("deprecation")public String uploadFile() {System.out.println("-----------------");System.out.println(fileFileName + "------------------" + file.length());try {FileInputStream fis = new FileInputStream(file);String photospath = ServletActionContext.getRequest().getRealPath("photos");System.out.println(photospath);File fs = new File(photospath, fileFileName);FileOutputStream fos = new FileOutputStream(fs);int len = 0;byte[] buffer = new byte[1024];while ((len = fis.read(buffer)) != -1) {fos.write(buffer, 0, len);}fos.flush();fos.close();fis.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return "uploadfile";}}


<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><include file="struts-constant.xml"></include><package name="test" namespace="/csdn" extends="json-default"><action name="ImagesAction_*" class="www.csdn.image.ImagesAction"method="{1}"><result name="images" type="json">list</result><result name="uploadfile"></result></action></package></struts>


更多相关文章

  1. Android(安卓)封装自己的工具Jar
  2. 教你如何创建类似QQ的android弹出菜单
  3. Fastboot使用详解
  4. android 动画分类
  5. android 自定义通知消息设置背景色不生效,导致部分机型显示白色字
  6. [Traceview]android性能测试
  7. AndroidManifest.xml配置文件详解
  8. Android(安卓)apk反编译
  9. NPM 和webpack 的基础使用

随机推荐

  1. 如何用eclipse搭建Android的开发环境
  2. Android(安卓)使用level-list改变对应的
  3. android显示键盘时的页面自动调整
  4. ionic3/ag4编写模仿京东商城的demo
  5. 《Android系统开发》笔记
  6. Android(安卓)中wifi的使用
  7. Android(安卓)MVP模式中的OOM
  8. 基于百度地图的android地理位置获取
  9. Android(安卓)== 在Android系统上运行JAV
  10. android开发每日汇总【2011-10-17】