Данные теряются при отправке изображений с клиента Android на сервер Flask - PullRequest
0 голосов
/ 08 апреля 2020

Я работаю над приложением, которое отправляет изображения с клиента Android на сервер Flask. На сервере я хочу их сохранить. В настоящее время я пытаюсь отправить 10 изображений, однако только 8 или 9 прибывают на сервер. Я не знаю, где теряется остальная информация. У кого-нибудь есть идея? Я пытался использовать перехватчики в приложении android, но не смог получить полезную информацию.

Вот код Android клиента:

    MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM);  

    //Network connection run on separate thread
    Thread thread = new Thread(new Runnable() {

        @Override
        public void run() {
            try  {
                for (int i = 0; i < 10; i++) {
                    BitmapFactory.Options options = new BitmapFactory.Options();
                    options.inPreferredConfig = Bitmap.Config.RGB_565;
                    String path = paths[i]; // paths - String array of random image paths
                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    try {
                        // Read BitMap by file path.
                        Bitmap bitmap = BitmapFactory.decodeFile(path, options);
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                    } catch(Exception e) {
                        Log.i(TAG,"Please Make Sure the Selected File is an Image.");
                        return;
                    }
                    byte[] byteArray = stream.toByteArray();

                    multipartBodyBuilder.addFormDataPart(path, "" + path, 
                        RequestBody.create(MediaType.parse("image/*jpg"), byteArray));
                }

                RequestBody postBodyImage = multipartBodyBuilder.build();
                Log.i(TAG,"post body length. " + postBodyImage.contentLength() + " string " + postBodyImage.contentType());

                postRequest(posturl, postBodyImage, c);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

    thread.start();
}

Метод postRequest:

    void postRequest(String postUrl, RequestBody postBody, Context c) {

       HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
       logging.setLevel(HttpLoggingInterceptor.Level.BASIC);

       final OkHttpClient client = new OkHttpClient.Builder()
            .readTimeout(60, TimeUnit.SECONDS)
            .connectTimeout(60, TimeUnit.SECONDS)
            .addInterceptor(logging)
            .build();


       Request request = new Request.Builder()
                .url(postUrl)
                .post(postBody)
                .build();

       client.newCall(request).enqueue(new Callback() {
           @Override
           public void onFailure(Call call, IOException e) { ... }
           @Override 
           public void onResponse(Call call, final Response response) throws IOException { ... }
    }     

И код сервера Flask:

app = flask.Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def handle_request():
    files_id = list(flask.request.files)
    print("\nNumber of Received Images : ", len(files_id))
    for file_id in files_id:
        imagefile = flask.request.files[file_id]
        filename = werkzeug.utils.secure_filename(imagefile.filename)
        print("\nReceived image File name : " + imagefile.filename)
        imagefile.save(filename)
return 'Successful POST'

(я использовал следующие уроки: https://github.com/ahmedfgad/AndroidFlask/blob/master/Part%201/FlaskServer/flask_server.py https://heartbeat.fritz.ai/uploading-images-from-android-to-a-python-based-flask-server-691e4092a95e)

Любая помощь приветствуется:)

...