android上传图片至服务器

这里举了两个例子,第一个例子比较全面,第二个例子作为入门级的。其实都是大同小异,这是我看的网上比较好的两个例子。 例一:

Upload Activity:
<span style="font-size:14px;">public class Upload extends Activity implements OnClickListener {private static String requestURL = "http://192.168.1.212:8011/pd/upload/fileUpload.do";private Button selectImage, uploadImage;private ImageView imageView;private String picPath = null;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.upload);selectImage = (Button) this.findViewById(R.id.selectImage);uploadImage = (Button) this.findViewById(R.id.uploadImage);selectImage.setOnClickListener(this);uploadImage.setOnClickListener(this);imageView = (ImageView) this.findViewById(R.id.imageView);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.selectImage:/*** * 这个是调用android内置的intent,来过滤图片文件 ,同时也可以过滤其他的 */Intent intent = new Intent();intent.setType("image/*");intent.setAction(Intent.ACTION_GET_CONTENT);startActivityForResult(intent, 1);break;case R.id.uploadImage:if (picPath == null) {Toast.makeText(Upload.this, "请选择图片!", 1000).show();} else {final File file = new File(picPath);if (file != null) {String request = UploadUtil.uploadFile(file, requestURL);uploadImage.setText(request);}}break;default:break;}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (resultCode == Activity.RESULT_OK) {/** * 当选择的图片不为空的话,在获取到图片的途径 */Uri uri = data.getData();Log.e(TAG, "uri = " + uri);try {String[] pojo = { MediaStore.Images.Media.DATA };Cursor cursor = managedQuery(uri, pojo, null, null, null);if (cursor != null) {ContentResolver cr = this.getContentResolver();int colunm_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);cursor.moveToFirst();String path = cursor.getString(colunm_index);/*** * 这里加这样一个判断主要是为了第三方的软件选择,比如:使用第三方的文件管理器的话,你选择的文件就不一定是图片了, * 这样的话,我们判断文件的后缀名 如果是图片格式的话,那么才可以 */if (path.endsWith("jpg") || path.endsWith("png")) {picPath = path;Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));imageView.setImageBitmap(bitmap);} else {alert();}} else {alert();}} catch (Exception e) {}}super.onActivityResult(requestCode, resultCode, data);}private void alert() {Dialog dialog = new AlertDialog.Builder(this).setTitle("提示").setMessage("您选择的不是有效的图片").setPositiveButton("确定", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {picPath = null;}}).create();dialog.show();}}</span>
重点UploadUtil:
<span style="font-size:14px;">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;}}</span>
来自:http://blog.csdn.net/onlyonecoder/article/details/8687395

例二:
转载: 点击打开链接
服务器servlet代码publicvoid doPost(HttpServletRequest request, HttpServletResponse response)             throws ServletException, IOException {                         String temp=request.getSession().getServletContext().getRealPath("/")+"temp";   //临时目录           System.out.println("temp="+temp);           String loadpath=request.getSession().getServletContext().getRealPath("/")+"Image"; //上传文件存放目录           System.out.println("loadpath="+loadpath);           DiskFileUpload fu =new DiskFileUpload();           fu.setSizeMax(1*1024*1024);   // 设置允许用户上传文件大小,单位:字节           fu.setSizeThreshold(4096);   // 设置最多只允许在内存中存储的数据,单位:字节           fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录                     //开始读取上传信息int index=0;           List fileItems =null;                                                                        try {                                        fileItems = fu.parseRequest(request);                                         System.out.println("fileItems="+fileItems);                                } catch (Exception e) {                                        e.printStackTrace();                                }                                                   Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件while (iter.hasNext())           {               FileItem item = (FileItem)iter.next();// 忽略其他不是文件域的所有表单信息if (!item.isFormField())               {                   String name = item.getName();//获取上传文件名,包括路径                   name=name.substring(name.lastIndexOf("\\")+1);//从全路径中提取文件名long size = item.getSize();                   if((name==null||name.equals("")) && size==0)                         continue;                   int point = name.indexOf(".");                   name=(new Date()).getTime()+name.substring(point,name.length())+index;                   index++;                   File fNew=new File(loadpath, name);                   try {                                        item.write(fNew);                                } catch (Exception e) {                                        // TODO Auto-generated catch block                                        e.printStackTrace();                                }                                                   }               else//取出不是文件域的所有表单信息               {                   String fieldvalue = item.getString();            //如果包含中文应写为:(转为UTF-8编码)                   //String fieldvalue = new String(item.getString().getBytes(),"UTF-8");               }           }           String text1="11";           response.sendRedirect("result.jsp?text1="+ text1);    }  
服务器端代码
服务器servlet代码publicvoid doPost(HttpServletRequest request, HttpServletResponse response)             throws ServletException, IOException {                         String temp=request.getSession().getServletContext().getRealPath("/")+"temp";   //临时目录           System.out.println("temp="+temp);           String loadpath=request.getSession().getServletContext().getRealPath("/")+"Image"; //上传文件存放目录           System.out.println("loadpath="+loadpath);           DiskFileUpload fu =new DiskFileUpload();           fu.setSizeMax(1*1024*1024);   // 设置允许用户上传文件大小,单位:字节           fu.setSizeThreshold(4096);   // 设置最多只允许在内存中存储的数据,单位:字节           fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录                     //开始读取上传信息int index=0;           List fileItems =null;                                                                        try {                                        fileItems = fu.parseRequest(request);                                         System.out.println("fileItems="+fileItems);                                } catch (Exception e) {                                        e.printStackTrace();                                }                                                   Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件while (iter.hasNext())           {               FileItem item = (FileItem)iter.next();// 忽略其他不是文件域的所有表单信息if (!item.isFormField())               {                   String name = item.getName();//获取上传文件名,包括路径                   name=name.substring(name.lastIndexOf("\\")+1);//从全路径中提取文件名long size = item.getSize();                   if((name==null||name.equals("")) && size==0)                         continue;                   int point = name.indexOf(".");                   name=(new Date()).getTime()+name.substring(point,name.length())+index;                   index++;                   File fNew=new File(loadpath, name);                   try {                                        item.write(fNew);                                } catch (Exception e) {                                        // TODO Auto-generated catch block                                        e.printStackTrace();                                }                                                   }               else//取出不是文件域的所有表单信息               {                   String fieldvalue = item.getString();            //如果包含中文应写为:(转为UTF-8编码)                   //String fieldvalue = new String(item.getString().getBytes(),"UTF-8");               }           }           String text1="11";           response.sendRedirect("result.jsp?text1="+ text1);    }  


更多相关文章

  1. Android动态设置Margin的方法
  2. Android设备的识别
  3. Android(安卓)Studio 简单设置
  4. Android(安卓)使用level-list改变对应的状态图片
  5. android system setup and building (2)
  6. Android中focusable属性的妙用——底层按钮的实现
  7. TextView设置字间距和行间距
  8. Android(安卓)运行崩溃找不到so包解决方案
  9. NPM 和webpack 的基础使用

随机推荐

  1. 看到蛋糕,才发现自己已到而立之年
  2. VMware workstation 技巧总结(持续更新)
  3. Java自学指南二、后端开发全景图与快速入
  4. 执行pod install 报错
  5. 我就改了一下参数,竟然让Tomcat和JVM的性
  6. 完全理解React Fiber
  7. 跟着鹏哥学C语言
  8. React 16
  9. 保姆级 tomcat 快速入门
  10. Docker简介