使用套接字发送图像文件,Android到Python

时间:2010-12-28 18:32:22

标签: python android sockets file

我试图将图像从Android客户端发送到python服务器,我之前已经使用python测试客户端和服务器实现了它。基本上我的客户端应用程序采用由用户详细信息和图像组成的表单。一旦用户选择了图像,我就会在onActivityResult方法中获取uri并将其解析为字符串,如此

selectedImagePath = selectedImageUri.toString();

当用户点击表单上的提交按钮时,将调用发送活动,并将表单数据作为附加组件中的附加内容进行调用。

Bundle b=new Bundle(); b.putStringArray("regValues", new String[]{name,email,selectedImagePath});

在发送活动中我与服务器建立连接并尝试发送图像。

` //与服务器建立链接

    try{

     //refer to the host computer's loopback interface
     host = InetAddress.getByName("10.0.2.2"); 
     link = new Socket(host,port);
     in = new BufferedReader(new InputStreamReader(link.getInputStream()));

     //access the strings that were passed to this activity 
     Bundle b = this.getIntent().getExtras();
     String[] regFormValues = b.getStringArray("regValues");

     //display connection confirmation

     String message = in.readLine();
     status.setText(message);



        File myFile = new File (regFormValues[2]);
        byte [] mybytearray  = new byte [(int)myFile.length()];
        FileInputStream fis = new FileInputStream(myFile);
        BufferedInputStream bis = new BufferedInputStream(fis);
        bis.read(mybytearray,0,mybytearray.length);
        OutputStream os = link.getOutputStream();

        os.write(mybytearray,0,mybytearray.length);
        os.flush();
        link.close();





    }
    catch(IOException e ){

     e.printStackTrace();

    }
    `

它连接到服务器没问题,  服务器创建一个输出文件,以便像往常一样将数据写入,但它只显示为空,因此没有收到任何数据。我认为这可能是客户端文件路径的问题。有任何想法吗 ?

编辑:基本上我想知道我是否以正确的方式访问图像文件,或者您是否有更好的访问和发送建议。

2 个答案:

答案 0 :(得分:0)

考虑使用File.exists()和File.isFile()等方法验证路径是否正常以及图像是否真的存在

同时检查图像是否甚至击中了电线 - 使用tcpdump ro wireshark

答案 1 :(得分:0)

我已经解决了这个问题,因为我use selectedImageUri = Uri.fromFile(photo);获取了uri(如果它被摄像机拍摄)和selectedImageUri = data.getData();(如果它被文件浏览器选中)。我使用selectedImagePath = selectedImagePath.substring(7);来剥离文件://形成摄像机的图像路径,从而生成/ sdcard / etc或存储它的任何地方。要获取文件浏览器选择的图像的文件路径,我使用了这个

// convert the image URI to the direct file system path of the image file  
public String getRealPathFromURI(Uri contentUri) {  

    // can post image  
    String [] proj={MediaStore.Images.Media.DATA};  
    Cursor cursor = managedQuery( contentUri,  
            proj, // Which columns to return  
            null,       // WHERE clause; which rows to return (all rows)  
            null,       // WHERE clause selection arguments (none)  
            null); // Order-by clause (ascending by name)  
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);  
    cursor.moveToFirst();  

    return cursor.getString(column_index);  

现在它按预期工作。