Android经服务器授权登陆并将图片Post到自己服务器的简单小Demo(Java+servlet实现)

首先感谢帮助过我的众多程序员大叔们,这是我的第一篇博客


最近,在和朋友聊天的时候帮助别人处理一个上传文件到自己服务器的程序,半天并没有解决那个问题后来有事情就耽误了,这两天想起来,便自己做了这么一个小Demo,就当练练手了,也让我掌握了很多android网络传输方面的知识,程序完善的不是很好,只是实现了服务器授权登陆,并上传文件(可选择)到服务器指定地址的功能。
登录界面获取登录名及密码后,上传至服务器,服务器验证成功反馈给手机端login success,如图:

登录界面效果图
登陆成功图

public class MainActivity extends Activity {

    protected static final int OK = 0;
    private Handler handler;
    private EditText et_username;
    private EditText et_userpwd;
    private String result="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_username=(EditText) this.findViewById(R.id.editText1);
        et_userpwd=(EditText) this.findViewById(R.id.editText2);

        handler=new Handler(){
            public void handleMessage(Message msg) {
                if (msg.what == OK){
                    Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(MainActivity.this,UpTranslateActivity.class);
                    startActivity(intent);
                }
            }
        };
    }
    public void click(View v){
        new Thread(){
            public void run(){
                String name=et_username.getText().toString();
                String pwd=et_userpwd.getText().toString();
                try {

                    URL url=new URL("http://192.168.191.1:8080/andro/AndroidServlet?username="+name+"&userpwd="+pwd);
                    System.out.println("url="+url);
                    HttpURLConnection conn=(HttpURLConnection) url.openConnection();
                    System.out.println("conn="+conn);
                    //conn.setConnectTimeout(5000);
                    //conn.setRequestMethod("GET");                 
                    if(conn.getResponseCode()==200){
                        System.out.println("访问成功");
                        InputStream in=conn.getInputStream();
                        BufferedReader br=new BufferedReader(new InputStreamReader(in));
                        result=br.readLine();
                        System.out.println("返回 结果是:"+result);
                        Message msg=new Message();
                        msg.what=OK;
                        handler.sendMessage(msg);
                    }
                    else{
                        System.out.println("访问失败");
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }       
            }
        }.start();
    }
}
登录成功后,自动跳转至上传图片的界面中,服务器的接受地址URL(例如我的:http://192.168.191.1:8080/andro/UploadShipServlet)固定显示到TextView中, 可以手动打开文件选择器进行图片以及文件的选择,选择完成TextView自动显示文件或者图片在手机中的位置,此时点击上传,就可以上传至服务器端。文件选择器效果如图:

文件选择器效果图

public class UpTranslateActivity extends Activity {
    public static final int FILE_SELECT_CODE = 1;
    private EditText Ed_Url;
    private EditText Ed_Wenjian;
    private Button upload;
    private Button choose;
    private String uploadFile ="/sdcard/123.jpg";
    private String actionUrl = "http://192.168.191.1:8080/andro/UploadShipServlet";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_up_translate);

        Ed_Url = (EditText) findViewById(R.id.ed_url);
        Ed_Wenjian = (EditText) findViewById(R.id.ed_wenjian);
        upload = (Button) findViewById(R.id.bt_up);
        choose =(Button) findViewById(R.id.bt_choose);
        Ed_Url.setText(actionUrl);
        Ed_Wenjian.setText(uploadFile);

        upload.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub

                        File file = new File(Ed_Wenjian.getText().toString());
                        String result = UploadUtil.uploadFile(file, actionUrl);
                        Message msg = new Message();
                        msg.what = 1;
                        msg.obj = result;
                        handler.sendMessage(msg);
                    }
                }).start();
                }
        });
        choose.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                showFileChooser();//打开文件选择器
            }
        });
    }
    private Handler handler = new Handler(){
        public void handleMessage(Message msg) {
            switch(msg.what){
            case 1:
                showDialog("服务器存储路径:\n"+msg.obj);
                break;
            }

        }
    };
     private void showFileChooser() {
           Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
           intent.setType("*/*"); 
           intent.addCategory(Intent.CATEGORY_OPENABLE);

           try {
               startActivityForResult( Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE);
           } catch (android.content.ActivityNotFoundException ex) {
               Toast.makeText(this, "Please install a File Manager.",  Toast.LENGTH_SHORT).show();
           }
    }
      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        switch(requestCode){
        case FILE_SELECT_CODE:
            if(resultCode == RESULT_OK){
                 Uri uri = data.getData();
                 String path = FileUtils.getPath(this, uri);
                 Ed_Wenjian.setText(path);
            }
            break;
        }
    }

  }
服务器端代码对登录信息进行验证(简单的进行了验证,没写数据库),这里就不贴登录验证的代码了,然后对文件进行了接收处理,上代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();

        // 创建文件项目工厂对象
        DiskFileItemFactory factory = new DiskFileItemFactory();

        // 设置文件上传路径
        String upload = this.getServletContext().getRealPath("/");

        // 获取系统默认的临时文件保存路径,该路径为Tomcat根目录下的temp文件夹
        String temp = System.getProperty("java.io.tmpdir");
        // 设置缓冲区大小为 5M
        factory.setSizeThreshold(1024 * 1024 * 5);
        // 设置临时文件夹为temp
        factory.setRepository(new File(temp));
        // 用工厂实例化上传组件,ServletFileUpload 用来解析文件上传请求
        ServletFileUpload servletFileUpload = new ServletFileUpload(factory);

        // 解析结果放在List中
        try {
            List<FileItem> list = servletFileUpload.parseRequest(request);

            for (FileItem item : list) {
                String name = item.getFieldName();
                InputStream is = item.getInputStream();

                if (name.contains("content")) {
                    System.out.println(inputStream2String(is));
                } else if (name.contains("img")) {
                    try {
                        path = upload+"\\"+item.getName();
                        inputStream2File(is, path);
                        break;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            out.write(path);  //返回给客户端上传成功后路径
        } catch (FileUploadException e) {
            e.printStackTrace();
            System.out.println("failure");
            out.write("failure");
        }

        out.flush();
        out.close();
    }

    // 流转化成字符串
    public static String inputStream2String(InputStream is) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int i = -1;
        while ((i = is.read()) != -1) {
            baos.write(i);
        }
        return baos.toString();
    }

    // 流转化成文件
    public static void inputStream2File(InputStream is, String savePath) throws Exception {
        System.out.println("文件保存路径为:" + savePath);
        File file = new File(savePath);
        InputStream inputSteam = is;
        BufferedInputStream fis = new BufferedInputStream(inputSteam);
        FileOutputStream fos = new FileOutputStream(file);
        int f;
        while ((f = fis.read()) != -1) {
            fos.write(f);
        }
        fos.flush();
        fos.close();
        fis.close();
        inputSteam.close();

    }
最终的效果图就是这样了:

上传成功,服务器反馈保存路径效果图

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值