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

Java乔晓松-android中上传图片到服务器Tomcat(Struts2)

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. AndroidManifest.xml配置文件详解
  2. Android 解决WebView无法上传文件的问题
  3. android 设置apk文件默认安装sdcard中
  4. Android使用webview让服务器上的js调用java代码的方法
  5. Android studio 真机调试时生成的文件找不到的解决方案
  6. 在Android中通过Java修改文件权限
  7. 第二篇 ( wcf 与 android 图片上传下载)
  8. Android开发便签9:在android资源文件中定义字符串数组
  9. java/android 统计文件夹大小及删除文件夹下所有文件和路径

随机推荐

  1. Android(安卓)可選文件格式瀏覽器
  2. Android(Java):长时间未登录提醒
  3. android截屏简单引用
  4. Android(安卓)之 SeekBar用法介绍
  5. Android(安卓)获取设备宽高分辨率
  6. android(6)(读数据的一些权限)
  7. android监控程序状态(安装 卸载)
  8. android 手电筒
  9. Android中获取和设置手机的壁纸
  10. Android(安卓)http文件上传-本地+服务器