设为首页 收藏本站
查看: 1121|回复: 0

[经验分享] 从app上传图片到php,再上传到java后端服务器的方法一条龙服务

[复制链接]

尚未签到

发表于 2017-12-31 06:06:04 | 显示全部楼层 |阅读模式
package com.dia.ration;  

  

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.HashMap;  

import java.util.Map;  

import java.util.UUID;  

  

/**  * 上传文件到服务器类
*/
  
public>  private static final String TAG = "uploadFile";
  private static final int TIME_OUT = 10 * 1000; // 超时时间
  private static final String CHARSET = "utf-8"; // 设置编码
  /**
  * Android上传文件到服务端
  *
  * @param file 需要上传的文件
  * @param RequestURL 请求的rul
  * @return 返回响应的内容
  */
  public static String uploadFile(File file, String RequestURL) {
  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是文件的名字,包含后缀名的 比如:abc.png
  */
  sb.append("Content-Disposition: form-data; name=\"uploadfile\"; 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();
  InputStream input = conn.getInputStream();
  StringBuffer sb1 = new StringBuffer();
  int ss;
  while ((ss = input.read()) != -1) {
  sb1.append((char) ss);
  }
  result = sb1.toString();
  }
  } catch (MalformedURLException e) {
  e.printStackTrace();
  } catch (IOException e) {
  e.printStackTrace();
  }
  return result;
  }
  /**
  * 通过拼接的方式构造请求内容,实现参数传输以及文件传输
  *
  * @param url Service net address
  * @param params text content
  * @param files pictures
  * @return String result of Service response
  * @throws IOException
  */
  public static String post(String url, Map<String, String> params, Map<String, File> files)
  throws IOException {
  String BOUNDARY = UUID.randomUUID().toString();
  String PREFIX = "--", LINEND = "\r\n";
  String MULTIPART_FROM_DATA = "multipart/form-data";
  String CHARSET = "UTF-8";
  URL uri = new URL(url);
  HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
  conn.setReadTimeout(10 * 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=\"uploadfile\"; filename=\""
  + file.getValue().getName() + "\"" + 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();
  StringBuilder sb2 = new StringBuilder();
  if (res == 200) {
  int ch;
  while ((ch = in.read()) != -1) {
  sb2.append((char) ch);
  }
  }
  outStream.close();
  conn.disconnect();
  return sb2.toString();
  }
  // 测试
  public static void main(String[] args) throws IOException {
  String requestURL = "sss";
  final Map<String, String> params = new HashMap<String, String>();
  params.put("send_userId", String.valueOf(1));
  params.put("send_email", "ss@ss.com");
  final Map<String, File> files = new HashMap<String, File>();
  files.put("uploadfile", new File("/var/data/de.jpg"));
  final String result = UploadUtil.post(requestURL, params, files);
  System.out.println("result is: " + result);
  }
  
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430169-1-1.html 上篇帖子: 侠岚之弋痕夕 下篇帖子: visual studio code(vscode) 调试php(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表