Я отправляю multipart
запросы с модификацией, и она отлично работает. но когда мое имя файла содержит персидский символ, мое приложение падает, и я получаю эту ошибку:
java.lang.IllegalArgumentException: неожиданный символ 0x62f при 35 в значении Content-Disposition: form-data; Name = "фото"; имя файла = "دوچرخه. JPG"
вот как я отправляю свой многочастный запрос:
File imageFile = new File(imagePath);
ProgressRequestBody fileBody = new ProgressRequestBody(imageFile, this);
MultipartBody.Part filePart = MultipartBody.Part.createFormData("photo", imageFile.getName(), fileBody);
RetroInterface retroInterface = RetrofitClientInstance.getRetrofitInstance().create(RetroInterface.class);
Call<SendFileResponse> call = retroInterface.sendPhoto(token, myHashmap, filePart);
как я могу решить эту проблему?!
Мое не идеальное решение, потому что оно может изменить некоторые символы, это URLEncoder.encode(file.name, "utf-8")
вместо простого имени.
Хотя это просто предложение, но в качестве обходного пути вы пытаетесь переименовать файл в id (метка времени/что-нибудь еще) для имени файла и добавить поле имени, которое будет содержать фактическое имя, если файл...
public class Object {
private String filename;
private File actualFile;
}
Таким образом, при извлечении позже вы все равно можете иметь ссылку на нужный файл.