Android:上传到服务器的图像始终为0字节

时间:2015-07-28 13:27:03

标签: php android image bitmap

我正在尝试上传(发布)表单数据 - 以及图像到服务器。我尝试了以下代码但无法查明错误。

Android代码:

我正在主活动中创建Product类的对象并将其发送到后台活动。我试图将数据上传到服务器的地方。

使用的步骤:

  1. 浏览图库中的图片并在图片视图中显示。
  2. 点击"上传"主要活动中的按钮转换了 将图像映射到位图并将其设置在类Product
  3. 的对象中
  4. 开始后台活动并传递产品参考 在第2步中创建
  5. 从产品对象中获取位图,将其转换为字节 array ..然后使用Base64转换为String。
  6. 将数据发布到服务器。
  7. protected String doInBackground(Products... params) {
        Products pd=params[0];
        Bitmap bmp=pd.getImage();
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        Log.e("Bitmap ","height : "+bmp.getHeight()+" Width :"+bmp.getWidth());
        Log.e("Size of bmp",""+bmp.getByteCount());
        bmp.compress(Bitmap.CompressFormat.JPEG,100,bos);
        Log.e("Size of bos",""+bos.size());
        byte[] imageToByte = bos.toByteArray();
        String imageData = Base64.encodeToString(imageToByte,Base64.DEFAULT);
        Log.e("Base64 encoded image",imageData);
    
        Log.e("Status","Image Parsed");
    
        try{
            String link="*****/sellPage.php";
    
            String data = URLEncoder.encode("uploadedimage", "UTF-8") + "=" + imageData;
            Log.e("Image Data",data);
            URL url = new URL(link);
            URLConnection conn = url.openConnection();
    
            conn.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    
            wr.write(data);
            wr.flush();
            Log.e("Status", "Request Sent");
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    
            StringBuilder sb = new StringBuilder();
            String line = null;
    
            // Read Server Response
            while ((line = reader.readLine()) != null) {
                sb.append(line);
                break;
            }
            Log.e("Status","Response forwarded for processing");
            return sb.toString();
        }
        catch (MalformedURLException e) {
            e.printStackTrace();
        }
        catch(UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        catch (IOException e){
            e.printStackTrace();
        }
    
        return null;
    }
    

    PHP代码从android读取数据并写入文件

    $imgsrc = base64_decode($_POST['uploadedimage']); 
    
    echo $imsrc;
    
    $fp = fopen('myImage1.jpg', 'w');
    
    fwrite($fp, $imgsrc);
    
    if(fclose($fp)){ echo "Successful";}
    
    else{ echo "Error uploading image";}
    

    输出

    正在服务器上创建文件,但文件大小仅为0字节。文件的一次或两次是几百KB,但当我试图在" img"中显示它时没有输出。标签

    任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

您可以在代码中使用以下代码将图像发送到后端

mEntity = new MultipartEntity();
    if (byteArray != null || bitmap != null) {
     mEntity.addPart("profile_pic", new ByteArrayBody(byteArray,
       "image/jpg", "" + etName.getText().toString()
       + "_profile_pic.jpg"));

对于后端,您可以将图像显示为$_FILES['profile_pic']。您将获得图像以及与图像相关的所有详细信息。