1、编写layout.xml

<LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"                 android:layout_marginRight="10dip"android:orientation="vertical">                <Button android:id="@+id/upload_btn"android:layout_width="match_parent"android:layout_height="24dip"android:textSize="13sp"android:textColor="#ffffff"                    android:gravity="center"android:background="@drawable/btn_bg_ora"android:text="上传图片" /><ImageView android:id="@+id/img_view"android:layout_width="match_parent"android:layout_height="100dp"/></LinearLayout>

生成效果图如下

2、编写提交图片到服务器 HttpUtils.java

 1 public class HttpUtils {
 2     /**** 作为标记 ****/
 3     private static final String TAG = "HttpUtils处理类";
 4
 5     /** 用户识别 ****/
 6     public static final String User_Agent = "";
 7     public static final String BASE_URL = "http://192.169.1.189:8080/";
 8
 9
10     private static final int TIME_OUT = 10 * 10000; // 超时时间
11     private static final String CHARSET = "utf-8"; // 设置编码
12     /**
13      * 上传文件到服务器
14      * @param file 需要上传的文件
15      * @param RequestURL 请求的rul
16      * @return 返回响应的内容
17      */
18     public static String uploadFile(File file, String RequestURL) {
19         int res=0;
20         String result = null;
21         String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
22         String PREFIX = "--", LINE_END = "\r\n";
23         String CONTENT_TYPE = "multipart/form-data"; // 内容类型
24
25         try {
26             URL url = new URL(RequestURL);
27             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
28             conn.setReadTimeout(TIME_OUT);
29             conn.setConnectTimeout(TIME_OUT);
30             conn.setDoInput(true); // 允许输入流
31             conn.setDoOutput(true); // 允许输出流
32             conn.setUseCaches(false); // 不允许使用缓存
33             conn.setRequestMethod("POST"); // 请求方式
34             conn.setRequestProperty("Charset", CHARSET); // 设置编码
35             conn.setRequestProperty("connection", "keep-alive");
36             conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary="+ BOUNDARY);
37
38             if (file != null) {
39                 /**
40                  * 当文件不为空时执行上传
41                  */
42                 conn.connect();
43                 DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
44                 StringBuffer sb = new StringBuffer();
45                 sb.append(PREFIX);
46                 sb.append(BOUNDARY);
47                 sb.append(LINE_END);
48                 /**
49                  * 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件
50                  * filename是文件的名字,包含后缀名
51                  */
52
53                 sb.append("Content-Disposition: form-data; name=\"image\"; filename=\"" + file.getName() + "\"" + LINE_END);
54                 sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END);
55                 sb.append(LINE_END);
56                 dos.write(sb.toString().getBytes());
57                 InputStream is = new FileInputStream(file);
58                 byte[] bytes = new byte[8*1024];
59                 int len = 0;
60                 while ((len = is.read(bytes)) != -1) {
61                     dos.write(bytes, 0, len);
62                 }
63                 is.close();
64                 dos.write(LINE_END.getBytes());
65                 byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes();
66                 dos.write(end_data);
67                 dos.flush();
68                 /**
69                  * 获取响应码 200=成功 当响应成功,获取响应的流
70                  */
71                  res = conn.getResponseCode();
72                 Log.e(TAG, "response code:" + res);
73                 if (res == 200) {
74                     Log.e(TAG, "request success");
75                     InputStream input = conn.getInputStream();
76                     StringBuffer sb1 = new StringBuffer();
77                     int ss;
78                     while ((ss = input.read()) != -1) {
79                         sb1.append((char) ss);
80                     }
81                     result = sb1.toString();
82                     Log.e(TAG, "result : " + result);
83                     return result;
84                 } else {
85                     Log.e(TAG, "request error");
86                 }
87
88             }
89         } catch (MalformedURLException e) {
90             e.printStackTrace();
91         } catch (IOException e) {
92             e.printStackTrace();
93         }
94         return null;
95     }
96 }

3、编写activity.java

  1 public class UploadActivity extends BaseActivity implements OnItemSelectedListener,OnClickListener{
  2
  3     private Button upload_btn;
  4
  5     private ImageView img_view;
  6     private String imgv_path = "";
  7     private final String IMAGE_TYPE = "image/*";
  8     private final int IMAGE_CODE = 0;
  9
 10     private Handler handler = new Handler();
 11
 12     @Override
 13     protected void onCreate(Bundle savedInstanceState) {
 14         super.onCreate(savedInstanceState);
 15         requestWindowFeature(Window.FEATURE_NO_TITLE);
 16         setContentView(R.layout.uploadImage);
 17
 18         img_view = (ImageView) findViewById(R.id.img_view);
 19         upload_btn = (Button) findViewById(R.id.upload_btn);
 20         upload_btn.setOnClickListener(this);
 21
 22     }
 23
 24     @Override
 25     public void onClick(View v) {
 26         switch (v.getId()) {
 27         case R.id.upload_btn:
 28             selectImage();
 29             break;
 30         default:
 31             break;
 32         }
 33     }
 34
 35     @Override
 36     protected void onDestroy(){
 37         super.onDestroy();
 38     }
 39
 40     /**
 41      * 选择上传图片
 42      * @param
 43      */
 44     private void selectImage() {
 45         Intent getAlbum = new Intent(Intent.ACTION_PICK);
 46         getAlbum.setType(IMAGE_TYPE);
 47         startActivityForResult(getAlbum, IMAGE_CODE);
 48     }
 49
 50     @Override
 51     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 52          if (requestCode == IMAGE_CODE) {
 53                 // 从相册返回的数据
 54                 if (data != null) {
 55                     // 得到图片的全路径
 56                     Uri uri = data.getData();
 57                     if (data != null) {
 58                          try {
 59                             // imgv_busicard.setImageBitmap(MediaStore.Images.Media.getBitmap(getContentResolver(), uri));
 60                              String[] proj = { MediaStore.Images.Media.DATA };
 61
 62                              Cursor cursor = getContentResolver().query(uri, proj, null, null, null);
 63                              if (cursor.moveToFirst()) {
 64                                  int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
 65                                  String path = cursor.getString(column_index);
 66                                  uploadImage(path,MediaStore.Images.Media.getBitmap(getContentResolver(), uri));
 67                              }
 68                              cursor.close();
 69                         } catch (Exception e) {
 70                             // TODO Auto-generated catch block
 71                             e.printStackTrace();
 72                         }
 73
 74                     }
 75                 }
 76          }
 77     }
 78
 79     /**
 80      * 上传图片到服务器
 81      * @param requestCode
 82      * @param path
 83      */
 84
 85     private void uploadImage(final String path,final Bitmap bmp) {
 86         final String url = HttpUtils.BASE_URL + "/uploadImage";
 87         final File file = new File(path);
 88         int fileLen = 0;
 89         try {
 90             FileInputStream fis = new FileInputStream(file);
 91             fileLen = fis.available();
 92         }catch (IOException e) {
 93             e.printStackTrace();
 94         }
 95         if (fileLen > 2 * 1024 * 1024) {
 96             DialogUtil.showDialog(UploadActivity.this, R.string.upload_oversize, false);
 97         } else {
 98             final String[] resultArr = {"",""};
 99             final Runnable runnableUI = new Runnable() {
100                 @Override
101                 public void run() {
102                     if (Integer.valueOf(resultMsg) == 0) {
103                         img_view.setImageBitmap(bmp);
104                         imgv_path = "/upload/" + resultArr[0];
105                     } else {
106                         DialogUtil.showDialog(UploadActivity.this, resultArr[1], false);
107                     }
108                 }
109             };
110             new Thread() {
111                 @Override
112                 public void run() {
113
114                     String result = HttpUtils.uploadFile(file, url);
115
116                     try {
117                         JSONObject json = new JSONObject(result);
118                         resultMsg = json.get("error").toString();
119                         resultArr[0] = json.get("src").toString();
120                         resultArr[1] = json.get("message").toString();
121                         handler.post(runnableUI);
122                     } catch (JSONException e) {
123                         e.printStackTrace();
124                     }
125                 }
126             }.start();
127     }
128
129     }
130
131 }

4、服务器端接收客户端发来请求,本文采用jfinal框架,action如下

 1 public void uploadImage() {
 2         JSONObject json = new JSONObject();
 3         try {
 4             String path_date = CommonUtils.getCurrentTime();
 5             UploadFile uploadFile = getFile("image", "/" + path_date, 2 * 1024 * 1024, "utf-8"); // 最大上传20M的图片
 6             String fileName = uploadFile.getFileName();//getPara("filename");
 7             System.out.println(fileName);
 8             //fileName = fileName.substring(fileName.lastIndexOf("\\") + 1); // 去掉路径
 9             File filePath = new File(PathKit.getWebRootPath() + "/temp/" + path_date);
10             File source = new File(filePath + "/" + fileName); // 获取临时文件对象
11             json.put("message", source.getAbsolutePath() + source.getName());
12             String extension = fileName.substring(fileName.lastIndexOf("."));
13             String savePath = PropKit.get("upload_path");
14
15             extension = extension.toLowerCase();
16             if (".png".equals(extension) || ".jpg".equals(extension) || ".gif".equals(extension)
17                     || ".jpeg".equals(extension) || ".bmp".equals(extension)) {
18
19                 FileInputStream fis = new FileInputStream(source);
20
21                 File targetDir = new File(savePath);
22                 if (!targetDir.exists()) {
23                     targetDir.mkdirs();
24                 }
25                 fileName = Utils.generateRecordCode() + extension;// String.valueOf(apiResult.get("media_id"))
26                                                                     // +
27                                                                     // extension;
28                 File target = new File(targetDir, fileName);
29                 if (!target.exists()) {
30                     target.createNewFile();
31                 }
32
33                 FileOutputStream fos = new FileOutputStream(target);
34                 byte[] bts = new byte[1024 * 20];
35                 while (fis.read(bts, 0, 1024 * 20) != -1) {
36                     fos.write(bts, 0, 1024 * 20);
37                 }
38
39                 fos.close();
40                 fis.close();
41                 json.put("error", 0);
42                 json.put("src", fileName); // 相对地址,显示图片用
43                 source.delete();
44
45             } else {
46                 source.delete();
47                 json.put("error", 1);
48                 json.put("message", "只允许上传png,jpg,jpeg,gif类型的图片文件");
49             }
50         } catch (FileNotFoundException e) {
51             json.put("error", 1);
52             json.put("message", "上传出现错误,请稍后再上传");
53         } catch (IOException e) {
54             json.put("error", 1);
55             json.put("message", "文件写入服务器出现错误,请稍后再上传");
56         } catch(RuntimeException e){
57             if(e.getMessage().contains("content length of")){
58                 json.put("error", 1);
59                 json.put("message", "图片不能大于2M");
60             }else{
61                 json.put("error", 1);
62                 json.put("message", e.getMessage());
63             }
64         }
65         setRender(new JsonRender(json.toJSONString()).forIE());
66     }

转载于:https://www.cnblogs.com/Youngly/p/6108930.html

android 上传文件到服务器相关推荐

  1. android -上传文件到服务器

    android上传文件到服务器       重点:最好是设置好content-type这些参数的配置!     package com.spring.sky.image.upload.network; ...

  2. Android上传文件至服务器(转)

    本实例实现每隔5秒上传一次,通过服务器端获取手机上传过来的文件信息并做相应处理:采用Android+Struts2技术. 一.Android端实现文件上传 1).新建一个Android项目命名为and ...

  3. android上传文件至服务器(android端+服务器端)

    引言:本来android文件上传的博客在网上挺多的,不过好些都只是有前台android端的上传,并没有后台服务器端的接收.而且自己写的时候也确实遇见了一些之前没注意到的地方,写出来也算是给自己提个醒. ...

  4. Android上传文件到服务器500,使用WebUploader解决安卓微信浏览器上传图片中遇到的bug...

    摘自个人博客:走啊走的记录,欢迎点击查看,效果更佳! 微信浏览器上传图片bug的原因 微信在新版本中采用的是自己的X5内核浏览器,而在较老的版本中还有可能是安卓的原生浏览器.具体的环境我也不太了解,但 ...

  5. android上传文件到服务器(图片、文本等)

    首先,在项目中导入SmartAndroid.jar包. 然后加入相应的方法: public void uploadFile(String imagePath){//服务器端地址String url = ...

  6. android上传字符串到服务器,Android上传文件到服务器

    Android要实现文件上传,可以利用Socket上传,也可以模拟Web进行上传,但是如果是使用第一种方式上传,严格的话就得使用TCP,这样容易生成系统死掉,或者是长时间等待,如果是UDP来传,就容易 ...

  7. Android上传文件至服务器

    转自:http://www.cnblogs.com/linjiqin/archive/2011/11/09/2242579.html 转载于:https://www.cnblogs.com/lomom ...

  8. Android上传文件到Web服务器,PHP接收文件(一)

    Android上传文件到服务器,通常采用构造http协议的方法,模拟网页POST方法传输文件,服务器端可以采用JavaServlet或者PHP来接收要传输的文件.使用JavaServlet来接收文件的 ...

  9. jsch 移动服务器上文件,jsch上传文件到服务器

    需求就是上传文件到服务器,服务器的存储地址由程序决定然后可以自动创建. 使用第三方:jsch JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文 ...

最新文章

  1. 在线实时大数据平台Storm并行和通信机制理解
  2. python调用webservice接口实例_python调用webservice接口的实现
  3. 旁门左道也谈cacti安装
  4. 火种 ctf_分析我的火种数据
  5. oracle sql语句 exists
  6. 每天进步一点点——Linux系统时间来处理
  7. 文件跨服务器传输_跨桌面设备传输文件的最优选?
  8. 为什么 React Native 连遭 Airbnb、Udacity 抛弃?
  9. [Java] 1010. Radix (25)-PAT甲级
  10. Bailian4106 出现两次的字符-Characters Appearing twice【计数统计】
  11. InstallShield安装与部署
  12. 20170716xlVba销售明细转销售单据
  13. 广域网、局域网和城域网(ip城域网和因特网)
  14. YOLACT pytorch模型转tensorflow savedModel格式
  15. 【项目总结】ACM Recsys2019
  16. ubuntu账户添加和删除
  17. RobotSim机器人快速成型-离线编程仿真软件
  18. 第二章 局域网技术和组网规范
  19. 模拟浏览器抓取淘宝书籍数据
  20. 面包屑导航可是建站制胜法宝

热门文章

  1. cocos2d-x 输出debug信息
  2. 深入浅出NIO之Channel、Buffer
  3. spring系统学习:20180611: Spring中AOP通知的类型
  4. Linux安装Java、Maven、Mysql、RabbitMQ
  5. Win7实用技巧之五库功能妙用
  6. JAVA课堂作业整理一
  7. 关闭chrome浏览器的developer tools
  8. You should rebuild using libgmp = 5 to avoid timing attack vulnerability
  9. 使用Lucene开发自己的搜索引擎
  10. 如何发布打印机文件夹及ICA 客户端打印机配置工具