android和服务器以post的方式传输图片和文字

来源:互联网 发布:网络捕鱼游戏下载 编辑:程序博客网 时间:2024/05/21 00:14

服务端Action:

@RequestMapping(value = "/doUploadProcessing")@ResponseBodypublic String doUploadProcessing(@RequestParam("file2")MultipartFile file2,Model model, HttpServletRequest request,HttpServletResponse response) throws Exception {Map<String, Object> param = new HashMap<String, Object>();Map<String,Object> result = new HashMap<String,Object>();String status = "0";try{String ext_type = URLDecoder.decode(request.getParameter("ext_type"), "UTF-8");String remark = URLDecoder.decode(request.getParameter("remark"), "UTF-8");String user_id = URLDecoder.decode(request.getParameter("user_id"), "UTF-8");String chn_id = URLDecoder.decode(request.getParameter("chn_id"), "UTF-8");param.put("ext_type", ext_type);param.put("remark", remark);param.put("user_id", user_id);param.put("chn_id", chn_id);if(!file2.isEmpty()){// 得到上传文件的根路径String uploadPath = SystemConfigUtil.getInstance().get("path_upload_root")+ "/facadeImages"+ File.separator;String filename = file2.getOriginalFilename();filename = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date())+ "_" + filename;FileBean f = new FileBean();String path = f.upload(file2.getInputStream(), filename, uploadPath).replaceAll("\\\\", "/");param.put("img_url", path);}else{param.put("img_url", "");}this.cardService.changeFacadeImage(param);result.put("state",true);}catch(Exception e){result.put("state",false);status = "0";e.printStackTrace();}WebserviceUtil wu = new WebserviceUtil();Map<String,String> map = new HashMap<String,String>();map.put("ip_addr",getIpAddr(request));map.put("userid",param.get("user_id").toString());map.put("method","/card/doUploadProcessing.do");map.put("request_message", wu.toJsonObject(param));map.put("response_message", wu.toJsonObject(result));map.put("status", status);wu.webserviceLog(map);//webservice_log日志return wu.toJsonObject(result);}@RequestMapping(value = "/doDownloadProcessing")@ResponseBodypublic byte[] doDownloadProcessing(Model model, HttpServletRequest request) throws Exception {String path = request.getParameter("path");path = URLDecoder.decode(path, "UTF-8");byte[] bytes = null;File file = new File(path);if(!file.exists()){return null;}try {FileInputStream fis = new FileInputStream(path);bytes = new byte[fis.available()];fis.read(bytes);fis.close();} catch (Exception e) {e.printStackTrace();}return bytes;}


Android相关代码:

package com.njtd.webservice;import java.io.ByteArrayOutputStream;  import java.io.DataOutputStream;  import java.io.File;  import java.io.FileInputStream;  import java.io.InputStream;  import java.net.HttpURLConnection;  import java.net.SocketTimeoutException;  import java.net.URL;  import java.net.URLEncoder;  import java.util.Arrays;import java.util.HashMap;  import java.util.Iterator;  import java.util.Map;  import java.util.Set;    import javax.imageio.ImageIO;  import javax.imageio.ImageReader;  import javax.imageio.stream.ImageInputStream;    public class HttpPostUtil {      URL url;      HttpURLConnection conn;      String boundary = "--------httppost123";      Map<String, String> textParams = new HashMap<String, String>();      Map<String, File> fileparams = new HashMap<String, File>();      DataOutputStream ds;        public HttpPostUtil(String url) throws Exception {          this.url = new URL(url);      }      //重新设置要请求的服务器地址,即上传文件的地址。      public void setUrl(String url) throws Exception {          this.url = new URL(url);      }      //增加一个普通字符串数据到form表单数据中      public void addTextParameter(String name, String value) {          textParams.put(name, value);      }      //增加一个文件到form表单数据中      public void addFileParameter(String name, File value) {          fileparams.put(name, value);      }      // 清空所有已添加的form表单数据      public void clearAllParameters() {          textParams.clear();          fileparams.clear();      }      // 发送数据到服务器,返回一个字节包含服务器的返回结果的数组      public byte[] send() throws Exception {          initConnection();          try {              conn.connect();          } catch (SocketTimeoutException e) {              // something              throw new RuntimeException();          }          ds = new DataOutputStream(conn.getOutputStream());          writeFileParams();          writeStringParams();          paramsEnd();          InputStream in = conn.getInputStream();          ByteArrayOutputStream out = new ByteArrayOutputStream();          int b;          while ((b = in.read()) != -1) {              out.write(b);          }          out.flush();                byte[] re  = null;try {re = out.toByteArray();} catch (Exception e) {e.printStackTrace();   out=null;   conn= null;}finally{    out.close();            out=null;            conn.disconnect();              conn= null;}              return re;      }      //文件上传的connection的一些必须设置      private void initConnection() throws Exception {          conn = (HttpURLConnection) this.url.openConnection();          conn.setDoOutput(true);          conn.setUseCaches(false);          conn.setConnectTimeout(10000); //连接超时为10秒          conn.setRequestMethod("POST");          conn.setRequestProperty("Content-Type",                  "multipart/form-data; boundary=" + boundary);          conn.setChunkedStreamingMode(1024 * 50);      }      //普通字符串数据      private void writeStringParams() throws Exception {          Set<String> keySet = textParams.keySet();          for (Iterator<String> it = keySet.iterator(); it.hasNext();) {              String name = it.next();              String value = textParams.get(name);              ds.writeBytes("--" + boundary + "\r\n");              ds.writeBytes("Content-Disposition: form-data; name=\"" + name                      + "\"\r\n");              ds.writeBytes("\r\n");              ds.writeBytes(encode(value) + "\r\n");          }      }      //文件数据      private void writeFileParams() throws Exception {          Set<String> keySet = fileparams.keySet();          for (Iterator<String> it = keySet.iterator(); it.hasNext();) {              String name = it.next();              File value = fileparams.get(name);              ds.writeBytes("--" + boundary + "\r\n");              ds.writeBytes("Content-Disposition: form-data; name=\"" + name                      + "\"; filename=\"" + encode(value.getName()) + "\"\r\n");              ds.writeBytes("Content-Type: " + getContentType(value) + "\r\n");              ds.writeBytes("\r\n");              ds.write(getBytes(value));              ds.writeBytes("\r\n");          }      }      //获取文件的上传类型,图片格式为image/png,image/jpg等。非图片为application/octet-stream      private String getContentType(File f) throws Exception {            //      return "application/octet-stream";  // 此行不再细分是否为图片,全部作为application/octet-stream 类型          ImageInputStream imagein = ImageIO.createImageInputStream(f);          if (imagein == null) {              return "application/octet-stream";          }          Iterator<ImageReader> it = ImageIO.getImageReaders(imagein);          if (!it.hasNext()) {              imagein.close();              return "application/octet-stream";          }          imagein.close();          return "image/" + it.next().getFormatName().toLowerCase();//将FormatName返回的值转换成小写,默认为大写        }      //把文件转换成字节数组      private byte[] getBytes(File f) throws Exception {          FileInputStream in = new FileInputStream(f);          ByteArrayOutputStream out = new ByteArrayOutputStream();          byte[] b = new byte[1024];          int n;          while ((n = in.read(b)) != -1) {              out.write(b, 0, n);          }          in.close();          return out.toByteArray();      }      //添加结尾数据      private void paramsEnd() throws Exception {          ds.writeBytes("--" + boundary + "--" + "\r\n");          ds.writeBytes("\r\n");      }      // 对包含中文的字符串进行转码,此为UTF-8。服务器那边要进行一次解码      private String encode(String value) throws Exception{          return URLEncoder.encode(value, "UTF-8");      }      public static void main(String[] args) throws Exception {          HttpPostUtil u = new HttpPostUtil("http://127.0.0.1/SC/card/doUploadProcessing.do");         u.addFileParameter("file2", new File("F:/2.jpg"));          u.addTextParameter("ext_type", "picture");          u.addTextParameter("remark", "sfw单位的微风dd");         u.addTextParameter("user_id", "aa");         u.addTextParameter("chn_id", "178188");         byte[] b = u.send();          String ss = new String(b);        System.out.println(ss);              /*  HttpPostUtil u = new HttpPostUtil("http://127.0.0.1/SC/card/doDownloadProcessing.do");         u.addTextParameter("path", "/weblogic/upload/facadeImages/20141127021411_2.jpg");          u.addTextParameter("user_id", "aa");         byte[] b = u.send();         System.out.println(Arrays.toString(b));*/    }    }  


 

0 0
原创粉丝点击