Я работаю над приложением, которое отправляет изображения с клиента 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)
Любая помощь приветствуется:)