Отправить файл изображения с помощью сокетов, Android для Python - PullRequest
0 голосов
/ 28 декабря 2010

Я пытаюсь отправить изображение с клиента Android на сервер Python, я достиг этого раньше с помощью клиента тестирования Python и сервера.По сути, мое клиентское приложение принимает форму, состоящую из данных пользователя и изображения.После того, как пользователь выбирает изображение, я получаю URI в методе onActivityResult и анализирую его в строкувызывается с данными формы как дополнительные функции в массиве в связке, например так.

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 голосов
/ 29 декабря 2010

Я решил, как я 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);  

Теперь все работает как положено.

0 голосов
/ 28 декабря 2010

Рассмотрите возможность использования таких методов, как File.exists () и File.isFile (), чтобы проверить, в порядке ли путь и действительно ли изображение там.tcpdump ro wireshark

...