在Android应用程序和php服务器站点上传图像和发送一些文本POST方法

时间:2016-04-29 07:32:20

标签: php android httpurlconnection

这是自我解答的问题

我想发送一些想要上传的图像文本,我知道Apache HttpClient多部分已被弃用。所以我想用HTTPUrlConnection来做这件事。在这里我的代码,请帮助。

1 个答案:

答案 0 :(得分:0)

我得到了答案:我只是重写了我的代码(正确的代码)。希望能帮助别人同样的麻烦。我想发送一个带有用户名和令牌的图像,它在android和php中会是这样的:

protected Object doInBackground(Object[] params) {
    int fbyte,buffersize,cbuffer;
    int maxbuffer=1024*1024;
    final String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****" + Long.toString(System.currentTimeMillis()) + "*****";
    BufferedReader reader = null;

    try{
        String sfile = params[1].toString();
        File f=new File(sfile);
        FileInputStream fis=new FileInputStream(f);
        URL url=new URL(params[0].toString());
        HttpURLConnection con =(HttpURLConnection) url.openConnection();
        con.setDoInput(true);
        con.setDoOutput(true);
        con.setRequestMethod("POST");
        con.setUseCaches(false);
        con.setRequestProperty("Connection", "keep-Alive");
        con.setRequestProperty("ENCType", "multipart/form-data");
        con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
        con.setRequestProperty("imagefile", sfile);
        DataOutputStream dos =new DataOutputStream(con.getOutputStream());


        // upload image :
        dos.writeBytes(twoHyphens + boundary + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"imagefile\"; filename=\"" + sfile + "\""+ lineEnd);
        dos.writeBytes(lineEnd);

        fbyte=fis.available();
        buffersize=Math.min(fbyte, maxbuffer);
        byte[] buffer=new byte[buffersize];
        cbuffer=fis.read(buffer, 0, buffersize);
        while(cbuffer>0){
            dos.write(buffer,0,buffersize);
            fbyte=fis.available();
            buffersize=Math.min(fbyte, maxbuffer);
            cbuffer=fis.read(buffer,0,buffersize);
        }
        dos.writeBytes(lineEnd);

        String Username = "my username";
        String Token    = "my token";

        //write username :
        dos.writeBytes(twoHyphens+ boundary + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"username\";" + lineEnd);
        dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
        dos.writeBytes(lineEnd + Username + lineEnd);
        dos.writeBytes(lineEnd);

        //write token :
        dos.writeBytes(twoHyphens+ boundary + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"token\";" + lineEnd);
        dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
        dos.writeBytes(lineEnd + Token + lineEnd);
        dos.writeBytes(lineEnd);

        if(con.getResponseCode()==200){
            fis.close();
            dos.flush();
            dos.close();
        }

    }catch(final Exception e){ e.printStackTrace(); }
    return "";
}// end doInBackground()

php方面:

$username = $_POST['username'];
$token = $_POST['token'];

$target_path = "upload/". basename( $_FILES['imagefile']['name']);
move_uploaded_file($_FILES['imagefile']['tmp_name'], $target_path);

echo "username: ".$username." and token: ".$token;