Android将图上以base64编码的格式上传到node.js服务器并保存

首先Android开发需要两个权限

  
    
其次,先看服务器是怎么写的
var http = require("http");
var fs = require("fs");
var queryString = require('querystring');
var url = require('url');
var util = require('util');

http.createServer(function (request, response) {
    // 定义了一个post变量,用于暂存请求体的信息
    var post = '';
    request.on('data', function (chunk) {
        post += chunk;
    });
// 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
    request.on('end', function () {
        post = queryString.parse(post);
        var base64Data = post.body;
        var dataBuffer = new Buffer(base64Data, 'base64');
        fs.writeFile("D:/"+post.name, dataBuffer, function (err) {
            if (err) {
                console.log(err);
            } else {
                console.log("保存成功!");
            }
        });
        console.log("请求结束" + post.body);
        response.writeHead(200, {"Content-Type": "text/plain;charset=utf8"});
        response.write("请求成功");
        response.end();
    });

}).listen(8888);
console.log("服务器启动");

然后新建了一个图片转编码的类

package com.example.a5.myapplication;

import java.io.FileInputStream;

import java.io.IOException;
import java.io.InputStream;
import sun.misc.BASE64Encoder;  

public class Imgtest {

    public  String GetImageStr(String path)
    {
        String imgFile = path;
        InputStream in = null;  
        byte[] data = null;
        try   
        {  
            in = new FileInputStream(imgFile);          
            data = new byte[in.available()];  
            in.read(data);  
            in.close();  
        }   
        catch (IOException e)   
        {  
            e.printStackTrace();  
        }
        BASE64Encoder encoder = new BASE64Encoder();  
        return encoder.encode(data);
    }

}
其中需要引用这个包BASE64.jar

然后是Android的主要代码,在上一篇的基础上写的


package com.example.a5.myapplication;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;

public class MainActivity extends AppCompatActivity {
private TextView textView;
    private  String img;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView= (TextView) findViewById(R.id.textview);
        Button button= (Button) findViewById(R.id.button);
        String mipath= Environment.getExternalStorageDirectory().getAbsolutePath().toString()+ File.separator+"123.jpg";
        img=new Imgtest().GetImageStr(mipath);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setText("开始请求");
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        HttpURLConnection connection = null;
                        URL url = null;
                        try {
                            url = new URL("http://192.168.50.214:8888");
                            connection = (HttpURLConnection) url.openConnection();
                            connection.setRequestMethod("POST");
                            connection.setConnectTimeout(8000);
                            connection.setReadTimeout(8000);
                            connection.setRequestProperty("Content-Type","application/json");
                            OutputStream outputStream=connection.getOutputStream();
                            BufferedWriter requestBody=new BufferedWriter(new OutputStreamWriter(outputStream));
                            String str = URLEncoder.encode(img, "UTF-8");
                            requestBody.write("name=123.jpg&body="+str);
                            requestBody.flush();
                            requestBody.close();
                            getResponseJava(connection);
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        } catch (ProtocolException e) {
                            e.printStackTrace();
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
        });
    }
    private void getResponseJava(HttpURLConnection urlConnection) {
        InputStream in = null;
        try {
            in = urlConnection.getInputStream();//响应
        } catch (IOException e) {
            urlConnection.disconnect();
            //textView.setText(e.getMessage());
            return;
        }
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        }
        final StringBuilder result = new StringBuilder();
        String tmp = null;
        try {
            while((tmp = reader.readLine()) != null){
                result.append(tmp);
            }
        } catch (IOException e) {
            //textView.setText(e.getMessage());
            return;
        } finally {
            try {
                reader.close();
                urlConnection.disconnect();
            } catch (IOException e) {
            }
        }
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                textView.setText(result);
            }
        });
    }
}

服务器给出的图是

Android将图上以base64编码的格式上传到node.js服务器并保存_第1张图片

你可能感兴趣的:(Android)