android 上传图片到webservice

最近在做android与webservice交互的,也是现学现卖,webservice的搭建就不说了,说一下android上传图片到webservice,这个写完等会我在写一个怎么从webservice上把上传的图片下载下来。 话不多说了,直接上代码了!


服务器:源码

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;

import ToolManager.ToolManager;

import purifier.service.SQLobject;

public class Upload_image extends HttpServlet{
	private static Logger logger = Logger.getLogger(Upload_image.class); 

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		//转到uploadImg中做处理
		uploadImg(request, response);
	}

	public void uploadImg(HttpServletRequest request, HttpServletResponse response)
	throws IOException {
		String userName = request.getParameter("userName");
		System.out.println("从Android获得的UserNAme为:"+userName);
		PrintWriter out = response.getWriter();
		// 创建文件项目工厂对象
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 设置文件上传路径
		//  需要在webRoot下新建一个名为upload的文件夹,在里面再建个名为photo的文件夹
		String upload = this.getServletContext().getRealPath("upload/photo");

		// 获取系统默认的临时文件保存路径,该路径为Tomcat根目录下的temp文件夹
		String temp = System.getProperty("java.io.tmpdir");
		// 设置缓冲区大小为 5M
		factory.setSizeThreshold(1024 * 1024 * 5);
		// 设置临时文件夹为temp
		factory.setRepository(new File(temp));
		// 用工厂实例化上传组件,ServletFileUpload 用来解析文件上传请求
		ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
		String path = null;
		String time = null;
		// 解析结果放在List中
		try {
			List<FileItem> list = servletFileUpload.parseRequest(request);
			for (FileItem item : list) {
				String name = item.getFieldName();
				InputStream is = item.getInputStream();
				if (name.contains("content")) {
//					System.out.println(inputStream2String(is));
				} else if (name.contains("img")) {
					try {
						path = upload+"\\"+item.getName();
						 
						inputStream2File(is, path,item.getName(),time);
						break;
					} catch (Exception e) {
						e.printStackTrace();
						
					}
				}
			}
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("res", "0");
			map.put("path",path);
			map.put("info","更改图片成功...");
			JSONObject json = JSONObject.fromObject(map); 
			out.write(json.toString());  //这里我把服务端成功后,返回给客户端的是上传成功后路径
//			return json.toString();
		} catch (FileUploadException e) {
			e.printStackTrace();
			System.out.println("failure");
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("res", "1");
			map.put("info","更改图片失败...");
			JSONObject json = JSONObject.fromObject(map); 
			out.write(json.toString());  //这里我把服务端成功后,返回给客户端的是上传成功后路径
		}
		out.flush();
		out.close();
	}
	   // 流转化成字符串
    public static String inputStream2String(InputStream is) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int i = -1;
        while ((i = is.read()) != -1) {
            baos.write(i);
        }
        return baos.toString();
    }
    // 流转化成文件
    public static void inputStream2File(InputStream is, String savePath,String PICNAME,String TIME) throws Exception {
        System.out.println("文件保存路径为:" + savePath);
        File file = new File(savePath);
        InputStream inputSteam = is;
        BufferedInputStream fis = new BufferedInputStream(inputSteam);
        FileOutputStream fos = new FileOutputStream(file);
        int f;
        while ((f = fis.read()) != -1) {
            fos.write(f);
        }
        fos.flush();
        fos.close();
        fis.close();
        inputSteam.close();
    }
}

在你的web.xml中添加

  <servlet>
    <servlet-name>Upload_image</servlet-name>

    <servlet-class>HttpInterface.Upload_image</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Upload_image</servlet-name>
    <url-pattern>/Upload_image</url-pattern>
  </servlet-mapping>

 下面是客户端:

权限什么都不说了,里面有些东西是我项目里面的就不方便全部粘出来了,贴到项目里面自己删除掉就可以了、

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;   
import java.io.File;   
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;   
import java.io.InputStream;   
import java.io.OutputStream;  
 import java.net.HttpURLConnection;   
 import java.net.MalformedURLException;   
 import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.UUID;

import org.json.JSONException;
import org.json.JSONObject;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log;   
/** * * 实现文件上传的工具类  

*/   
public class FileImageUpload {  
     private static final String TAG = "uploadFile";   
     private static final int TIME_OUT = 10*10000000; //超时时间   
     private static final String CHARSET = "utf-8"; //设置编码   
     public static final String SUCCESS="1"; public static final String FAILURE="0";   
     
     /** * android上传文件到服务器  
     * @param file 需要上传的文件  
     * @param RequestURL 请求的rul  
     * @return 返回响应的内容  
     */   
     public static JSONObject uploadFile(File file){
    	 JSONObject jsonObject = new JSONObject();
         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(String_v.mUploadHost);
             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);
             conn.setRequestProperty("action", "upload");
             conn.connect();

             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是文件的名字,包含后缀名的   比如:abc.png
                  */

                 sb.append("Content-Disposition: form-data; name=\"img\"; 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=成功
                  * 当响应成功,获取响应的流
                  */
                 int res = conn.getResponseCode();
                 if(res==200){
                     InputStream input =  conn.getInputStream();
                     StringBuffer sb1= new StringBuffer();
                     int ss ;
                     while((ss=input.read())!=-1){
                         sb1.append((char)ss);
                     }
                     result = sb1.toString();
                     System.out.println(result);
                     try {
             			jsonObject = new JSONObject(result);
             		} catch (JSONException e) {
             			// TODO Auto-generated catch block
             			e.printStackTrace();
             		}
                 }else{
                	 Map<String, Object> map = new HashMap<String, Object>();
                		map.put("res", "-1");
        				map.put("info",String_v.Connection_OutTime);
        				ObjectMapper mapper = new ObjectMapper(); 
        				try {
							jsonObject = new JSONObject(mapper.writeValueAsString(map));
						} catch (JSONException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
                 }
             }
         } catch (MalformedURLException e) {
             e.printStackTrace();
          	 Map<String, Object> map = new HashMap<String, Object>();
     		map.put("res", "-1");
				map.put("info",String_v.Connection_OutTime);
				ObjectMapper mapper = new ObjectMapper(); 
				try {
					try {
						jsonObject = new JSONObject(mapper.writeValueAsString(map));
					} catch (JsonProcessingException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				} catch (JSONException e1) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
         } catch (IOException e) {
             e.printStackTrace();
          	 Map<String, Object> map = new HashMap<String, Object>();
     		map.put("res", "-1");
				map.put("info",String_v.Connection_OutTime);
				ObjectMapper mapper = new ObjectMapper(); 
				try {
					try {
						jsonObject = new JSONObject(mapper.writeValueAsString(map));
					} catch (JsonProcessingException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				} catch (JSONException e1) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
         }
        
    
         return jsonObject;
     }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值