Отправка изображения с Android с помощью Retrofit и Получение изображения с Python Flask - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь отправить изображение на конечную точку flask из приложения android, используя модификацию 2, но мне кажется, что каждый раз происходит сбой. Конечная точка Flask работает как с html, так и с почтальонами, поэтому проблема в модифицированной части.

Вот конечная точка Flask:

@app.route("/uploadfile", methods=["POST"])
def uploadsingle():
    file = request.files['file']
    file.save(os.path.join("/home/moralalp/mysite/", file.filename))
    return "Success"

Ниже представлен интерфейс для модернизации:

@Multipart
@POST("uploadfile")
Call<ResponseBody> uploadPhoto(@Part("description") RequestBody description, @Part MultipartBody.Part file);

И, наконец, метод uploadFile:

private void uploadFile(Uri fileUri) {

    final EditText name = findViewById(R.id.editText);

    RequestBody descriptionPart = RequestBody.create(MultipartBody.FORM, name.getText().toString());

    File originalFile = new File(getRealPathFromURI(fileUri));

    RequestBody filePart = RequestBody.create(MediaType.parse(getContentResolver().getType(fileUri)), originalFile);

    MultipartBody.Part file = MultipartBody.Part.createFormData("file", originalFile.getName(), filePart);

    Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl("https://mysite.pythonanywhere.com/")
            .addConverterFactory(GsonConverterFactory.create());

    Retrofit retrofit = builder.build();

    UserClient client = retrofit.create(UserClient.class);

    Call<ResponseBody> call = client.uploadPhoto(descriptionPart, file);
    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            Toast.makeText(MainActivity.this, "YEAH", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Toast.makeText(MainActivity.this, "NOOO", Toast.LENGTH_SHORT).show();
        }
    });

}

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

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Хорошо, поэтому добавление следующего в AndroidManifest. xml файл решило мою проблему:

<manifest ... >
    <!-- This attribute is "false" by default on apps targeting Android Q. -->
    <application android:requestLegacyExternalStorage="true" ... >
     ...
    </application>
</manifest>
0 голосов
/ 31 января 2020

Что касается этой ошибки, пожалуйста, используйте следующую строку, чтобы выяснить, в чем заключается проблема, и, пожалуйста, отредактируйте свой вопрос, чтобы она содержалась

@Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Toast.makeText(MainActivity.this, "NOOO", Toast.LENGTH_SHORT).show();
            Log.d("Error_TAG", "onFailure: Error: " + t.getMessage());
        }

После этого, пожалуйста, отфильтруйте ваш журнал cat на Error_TAG и добавьте Ошибка в вопросе

Удачи

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