如何以最快的方式从android到服务器上传图像(php)

时间:2014-01-17 10:52:57

标签: php android image

我需要逐个上传图片到服务器, 当图像上传到服务器时,服务器执行“图像处理”, 当图像处理完成后服务器返回答案。 客户端(android)从服务器获得答案,它需要立即启动另一张图片所以所以。 所有这些应该是最高速度

目前: 我的上传速度平均为230kB / s。

服务器上的图像大小为362KB

禁用服务器中的图像处理。

安卓代码:

ByteArrayOutputStream bos_output = new ByteArrayOutputStream();
boolean isCompress = bmp.compress(CompressFormat.JPEG , 60, bos_output);
byte[] bos = bos_output.toByteArray();
// call the method in Thread
String response = myPost(SERVER_URL, "file_name", bos);

// the uploading method
public String myPost(String serverPath, String fileNameonserver, byte[] baos) 
{
    String fileName = fileNameonserver+".jpg";
    HttpURLConnection conn = null;
    DataOutputStream dos = null;  
    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****";
    try {
        URL url = new URL(serverPath);
        conn = (HttpURLConnection) url.openConnection();
        conn.setDoInput(true); 
        conn.setDoOutput(true); 
        conn.setUseCaches(false); 
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Connection", "Keep-Alive");
        conn.setRequestProperty("Cache-Control", "no-cache");
        conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
        conn.setRequestProperty("uploaded_file", fileName); 
        dos = new DataOutputStream(conn.getOutputStream());
        dos.writeBytes(twoHyphens + boundary + lineEnd); 
        dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" + fileName + "\"" + lineEnd);
        dos.writeBytes(lineEnd);
        dos.write(baos);
        dos.flush();
        dos.close();
        String response= "";
        //start listening to the stream
        Scanner inStream = new Scanner(conn.getInputStream());
        //process the stream and store it in StringBuilder
        while(inStream.hasNextLine())
            response+=(inStream.nextLine());

        return response;
    } 
    catch (Exception e)
    {
        e.printStackTrace();
        return "";
    }
}

php代码:

<?php
    $file_path = "images/";
    $file_path = $file_path . basename( $_FILES['uploaded_file']['name']);
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) 
    {

        //$data = $_FILES['uploaded_file']['name'];
        //exec("ALGO.exe {$data}",$output);
        //foreach($output as $line)
        //{
        //  echo $line;
        //}
        //echo "";
        echo "success";
        //unlink($file_path);
    } else{
        echo "fail";
    }
 ?>

此代码正常运行,我可以以2秒的平均值上传图片

这还不够好,这对照片或缩放来说是个问题。

1 - 我有一个想法只传递更改,但我没有时间去做这么复杂的图书馆建议吗?

2 - 或者我可以使用 RTSP 吗?

3 - 这里有任何强力压缩吗? (代码片段非常好)

感谢。

1 个答案:

答案 0 :(得分:0)

你真的需要全尺寸的图片吗?

即使压缩到jpg / 60,如果你的图像是直接从相机出来的3000x2500px,这是一个巨大的图像。你打算用那个大图像做什么吗?

如果不是,你可以将图像缩小到更合理的尺寸,例如1200x900px,这将大大减小一旦压缩为jpeg / 60的尺寸。

降级:https://stackoverflow.com/a/17773344/578746