Помощь Рефакторинг метода работы Загрузка BitMap (вместо файла) на сервер PHP - PullRequest
0 голосов
/ 20 октября 2010

Это прекрасно работает для файлов.Я отметил местоположение, нуждающееся в рефакторинге, чтобы заставить его работать с растровым изображением.Кажется, я не могу найти совместимый ContentBody для .addPart.

Проблема, которую я пытаюсь решить, состоит в том, что у меня уже есть изображение в ImageView внутри Activity, поэтому вместо того, чтобы снова прочитать его с SDКара, я хочу передать его этому методу напрямую.Я, вероятно, буду масштабировать его, пока я на нем.

Я нашел подсказку в этом коде, однако он не совместим с Android

    Part[] parts = {
            new FilePart("pictureFile", new 

ByteArrayPartSource ("pictureFile", getBytes(растровое изображение))),};

Я так чертовски потерян: (

Есть идеи? TIA.

public JSONArray uploadUserPhoto(String fileToSend,  boolean isPrimary) {

        String url = "http://www.nationwidearbitrationandmediation.com/ia/android/uploadImage.php"; 
        JSONArray jsonArray = null;

       try {
             HttpClient client = new DefaultHttpClient();  
             client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

             HttpPost post = new HttpPost(url);
             //try adding these
             post.getParams().setParameter("http.protocol.expect-continue", false);
             post.getParams().setParameter("http.protocol.content-charset", "UTF-8"); 
             post.getParams().setParameter("http.protocol.reject-relative-redirect", false);

             MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);  

             reqEntity.addPart("ip", new StringBody(Boolean.toString(isPrimary), "text/plain", Charset.forName( "UTF-8" )));

               /***  NEED HELP HERE ****/
             File fileToUpload = new File(fileToSend);          //get file from name
             Log.d(TAG,"FileSize: " + fileToUpload.length());   //good time to test if file is larger than maxFileSize


             FileBody fileBody = new FileBody(fileToUpload, "image/jpg");
             reqEntity.addPart("uploadedfile", fileBody);
             /*****  DONE *****/

             post.setEntity(reqEntity);  

             HttpResponse response = client.execute(post);  
             HttpEntity resEntity = response.getEntity(); 
             String serverResponse = EntityUtils.toString(resEntity);
             client.getConnectionManager().shutdown();

             Log.i("RESPONSE",serverResponse);

             return  new JSONArray(serverResponse);

    } catch (Exception e) {
        Log.i(TAG,"Error: " + e.toString());
        return jsonArray;
    }

} // uploadUserPhoto

Ответы [ 2 ]

0 голосов
/ 26 января 2012

Вот модифицированная версия, которая отправляет байтовый массив на сервер, поскольку вы можете получить байты изображения, которые вы можете использовать для отправки их на сервер как прикрепленное изображение к запросу POST:

public String uploadUserPhoto(byte[] bytesToSend,  boolean isPrimary) {
    String url = "test.php"; 

    try {
        HttpClient client = new DefaultHttpClient();  
        client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

        HttpPost post = new HttpPost(url);
        //try adding these
        post.getParams().setParameter("http.protocol.expect-continue", false);
        post.getParams().setParameter("http.protocol.content-charset", "UTF-8"); 
        post.getParams().setParameter("http.protocol.reject-relative-redirect", false);

        MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);  

        reqEntity.addPart("ip", new StringBody(Boolean.toString(isPrimary), "text/plain", Charset.forName( "UTF-8" )));

        reqEntity.addPart(new FormBodyPart("uploadedFile", new ByteArrayBody(bytesToSend, "application/octet-stream", "uploadedFile"))); // you can also use image/jpg as mime type

        post.setEntity(reqEntity);  

        HttpResponse response = client.execute(post);  
        HttpEntity resEntity = response.getEntity(); 
        String serverResponse = EntityUtils.toString(resEntity);
        client.getConnectionManager().shutdown();


        return serverResponse;
    } catch (Exception e) {
        System.out.println("Error: " + e.toString());
        return null;
    }
}
0 голосов
/ 20 октября 2010

РЕШЕНО ДЛЯ МАЛЫХ ИЗОБРАЖЕНИЙ - Я использовал кодировку base64, чтобы сделать изображение строкой. Так как я хотел только маленькие изображения, это будет работать для меня.

Я не отмечаю это как ответ, потому что другим может потребоваться настоящее исправление, а не взлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...