Android отправляет изображение в виде двоичного потока с использованием socket.io - PullRequest
0 голосов
/ 09 декабря 2018

ребята, я хочу отправить изображение на сервер в виде двоичной потоковой передачи, используя node.js & socket.io на Android, любой может помочь, пожалуйста?

1 Ответ

0 голосов
/ 10 декабря 2018

В Android есть несколько библиотек для загрузки больших файлов, таких как изображения и видео.Если вы не делаете это в качестве учебного опыта, почти наверняка будет проще использовать один из них.Вот некоторые из последних:

Более старая библиотека - это библиотека apache MultiPartMine - см. И пример здесьвидео, а не изображение, но применяются те же принципы:

//Create a new Multipart HTTP request to upload the video
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(serverURL);

        //Create a Multipart entity and add the parts to it
        try {
            Log.d("VideoUploadTask doInBackground","Building the request for file: " + videoPath);
            FileBody filebodyVideo = new FileBody(new File(videoPath));
            StringBody title = new StringBody("Filename:" + videoPath);
            StringBody description = new StringBody("Test Video");
            MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
            reqEntity.addPart("videoFile", filebodyVideo);
            reqEntity.addPart("title", title);
            reqEntity.addPart("description", description);
            httppost.setEntity(reqEntity);
        } catch (UnsupportedEncodingException e1) {
            //Log the error
            Log.d("VideoUploadTask doInBackground","UnsupportedEncodingException error when setting StringBody for title or description");
            e1.printStackTrace();
            return -1;
        }

        //Send the request to the server
        HttpResponse serverResponse = null;
        try {
            Log.d("VideoUploadTask doInBackground","Sending the Request");
            serverResponse = httpclient.execute( httppost );
        } catch (ClientProtocolException e) {
            //Log the error
            Log.d("VideoUploadTask doInBackground","ClientProtocolException");
            e.printStackTrace();
        } catch (IOException e) {
            //Log the error
            Log.d("VideoUploadTask doInBackground","IOException");
            e.printStackTrace();
        }

        //Check the response code
        Log.d("VideoUploadTask doInBackground","Checking the response code");
        if (serverResponse != null) {
            Log.d("VideoUploadTask doInBackground","ServerRespone" + serverResponse.getStatusLine());
            HttpEntity responseEntity = serverResponse.getEntity( );
            if (responseEntity != null) {
                //log the response code and consume the content
                Log.d("VideoUploadTask doInBackground","responseEntity is not null");
                try {
                    responseEntity.consumeContent( );
                } catch (IOException e) {
                    //Log the (further...) error...
                    Log.d("VideoUploadTask doInBackground","IOexception consuming content");
                    e.printStackTrace();
                }
            } 
        } else {
            //Log that response code was null
            Log.d("VideoUploadTask doInBackground","serverResponse = null");
            return -1;
        }

Полный пример здесь: https://stackoverflow.com/a/32887541/334402

Аналогично, на стороне узла есть стандартные библиотеки, которые можно использовать для загрузкифайл.Одним из примеров является muster:

Multer - это промежуточное программное обеспечение node.js для обработки multipart / form-data, которое в основном используется для загрузки файлов.Это написано поверх busboy для максимальной эффективности.

Здесь есть проверенный (хотя и пару лет назад) пример: https://stackoverflow.com/a/41567587/334402

Если вы хотитечтобы написать свой собственный синтаксический анализатор на стороне сервера, в этом ответе есть хорошая актуальная информация: https://stackoverflow.com/a/23718166/334402

...