Android上传图片到服务器

一.android需要导入异步请求的jar包 AsyncHttpClient 

public static void reg(final Context cont,Bitmap photodata,String regData) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            //将bitmap一字节流输出 Bitmap.CompressFormat.PNG 压缩格式,100:压缩率,baos:字节流
            photodata.compress(Bitmap.CompressFormat.PNG, 100, baos);
            baos.close();
            byte[] buffer = baos.toByteArray();//将图片的字节流数据加密成base64字符输出
            String photo = Base64.encodeToString(buffer, 0, buffer.length,Base64.DEFAULT);

            //photo=URLEncoder.encode(photo,"UTF-8");
            RequestParams params = new RequestParams();
                       params.put("photo", photo);
                        params.put("name", "woshishishi");//传输的字符数据
                        String url = "http://10.0.2.2:8080/IC_Server/servlet/RegisterServlet1";
                        AsyncHttpClient client = new AsyncHttpClient();
                        client.post(url, params, new AsyncHttpResponseHandler() {
                        @Override
                    public void onSuccess(int statusCode, String content){
                    Toast.makeText(cont, "头像上传成功!"+content, 0)
                        .show();
                            }
                    @Override
                    public void onFailure(Throwable e, String data){
                    Toast.makeText(cont, "头像上传失败!", 0)
                        .show();
                }
            });

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

二.服务器的代码(用的是springmvc)

@RequestMapping("/post")
    public void post(HttpServletResponse response , Post post
            //,MultipartFile image
            ,String image
            )throws IOException{
        Receipt receipt = new Receipt();
        try {
            /*// 二进制流  上传图片
            if(image!=null && image.getOriginalFilename()!=null && image.getOriginalFilename().length()>0){
                //原始名称
                String originalFilename = image.getOriginalFilename();
                //新的图片名称
                String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
                String saveName = ImageUtil.findFilePathByFileName(newFileName);
                System.out.println("O______________________________________K");
                //新图片
                File newFile = new File(saveName);
                if(!newFile.exists()){
                    newFile.mkdir();
                }
                //将内存中的数据写入磁盘
                image.transferTo(newFile);
                System.out.println("O______________________________________");
                //将新图片名称写到itemsCustom中
                post.setImg(newFileName);
            }else {
                post.setImg("");
            }*/

            //  =================================                 字符串接收文件
            if(image!=null && image.length()>0){

                byte[] photoimg = new BASE64Decoder().decodeBuffer(image);
                for (int i = 0; i < photoimg.length; ++i) {
                    if (photoimg[i] < 0) {
                        // 调整异常数据
                        photoimg[i] += 256;
                    }
                }
                String newFileName = UUID.randomUUID() + ".png";
                String saveName = ImageUtil.findFilePathByFileName(newFileName);
                File newFile = new File(saveName);
                if(!newFile.exists()){
                    newFile.createNewFile();
                }
                FileOutputStream out = new FileOutputStream(newFile);
                out.write(photoimg);
                out.flush();
                out.close();
                post.setImg(newFileName);
                logger.debug("文件接收成功");
            }else {
                post.setImg("");
            }

三.工具类

public static String rootPathString = "WebRoot/WEB-INF/upload";

    public static String findFilePathByFileName(String fileName) {
        if(fileName == null || fileName.trim().isEmpty()){
            return "/default.png";
        }
        int hashcode = fileName.hashCode();
        int dir1 = hashcode&0xf;  //0--15
        int dir2 = (hashcode&0xf0)>>4;  //0-15
        String dir = rootPathString + "/" + dir1 + "/" + dir2;  //upload\2\3  upload\3\5
        File file = new File(dir);
        if(!file.exists()){
            //创建目录
            file.mkdirs();
        }
        return dir+"/"+fileName;
    }

ncHttpClient

时间: 2024-10-25 09:28:52

Android上传图片到服务器的相关文章

android上传图片至服务器

本实例实现了android上传手机图片至服务器,服务器进行保存 服务器servlet代码publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String temp=request.getSession().getServletContext().getRealPath("/")+"temp"

android 上传图片到服务器Tomcat(Struts2)

在做android开发的时候,有时你会用到图片的上传功能,在我的android项目中,我是选中图片,点击上传多张图片 android客户端上传图片部分的代码如下: package com.example.myphotos.utils; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.Inp

android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架

前端 andoid  activity用到的函数 AsyncHttpClient  是一个框架提供的库  可以异步传输,使用时需下载android-async-http-1.4.4.jar包导入到项目中 [java]  view plain copy public static void reg(final Context cont,Bitmap photodata,String regData) { try { ByteArrayOutputStream baos = new ByteArra

通过android 客户端上传图片到服务器

昨天,(在我的上一篇博客中)写了通过浏览器上传图片到服务器(php),今天将这个功能付诸实践.(还完善了服务端的代码) 不试不知道,原来通过android 向服务端发送图片还真是挺麻烦的一件事. 上传代码: /* 上传文件至Server的方法 */ private void uploadFile() { String end = "\r\n"; String twoHyphens = "--"; String boundary = "*****"

Android上传图片(PHP服务器)

原理 Android客户端模拟一个HTTP的Post请求到服务器端,服务器端接收相应的Post请求后,返回响应信息给给客户端. PHP服务器 <?php move_uploaded_file($_FILES['file']['tmp_name'], "./upload/".$_FILES["file"]["name"]); ?> Android客户端 package com.example.uploadfile.app; import

从相册获取图片及调用相机拍照获取图片,最后上传图片到服务器

调用相机拍照获取图片: 跳转到到拍照界面: Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //下面这句指定调用相机拍照后的照片存储的路径 mSzImageFileName = Long.toString(System.currentTimeMillis()) + ".png"; takeIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new F

Android上传图片之调用系统拍照和从相册选择图片

Android上传图片之调用系统拍照和从相册选择图片 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015年12月17日下午发了第一篇博文,现在是2016年4月6日.时间间隔长的过分啊,我自己都看不下去了.原因呢?当然是自己的原因,其实是有很多时间来些博客的,但是这些时间都花在DOTA上了(还是太年轻啊).请原谅我的过错--. 一.概述: 现在几乎应用都会用到上传图片的功能,而要上传图片,首先得选择图片,本文不针对如何上传图片到服务器(每个项目与服务器交互的方式不同,因

【Android】与服务器实现JSON数据通信

一.前言 作为一名移动端开发人员,具备一定的服务端开发能力也是非常必要的,本篇博客讲述如何在Android和服务器之间实现JSON数据通信交互,博客内容基于另外一篇博客:[Web]Eclipse + Maven + Struts搭建服务器. 二.服务器端改造 在博客[Web]Eclipse + Maven + Struts搭建服务器中,我们实现了服务器的搭建,现在要做的事情就是让它返回的数据是一个JSON格式的,这样在获得请求的时候,我们才可以得到JSON数据,其配置改变如下. 首先我们新建一个

Android客户端与服务器交互方式-小结

最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json.要在Android手机客户端与pc服务器交互,需要满足下面几种条件:跨平台.传输数据格式标准.交互方便. 为了与服务器通讯其实无非就两种协议HTTP和TCP,TCP的学习Socket,HTTP的话熟悉一下HTTP协议和相关Java API.而下面的几种方式就是从这两种协议扩展出来的:webservices soap.SSH的JSON(可参考:该链接