@Multipart
@POST("http://ec2-18-216-193-78.us-east-
2.compute.amazonaws.com:3000//api/v1/snapNShare")
Call<SnapNShareResponse> sendUserReview(
@Header("Authoriozation") String token,
@Part("restaurantInfoId") String restaurantInfoId,
@Part MultipartBody.Part dishPicture,
@Part MultipartBody.Part audioReview,
@Part("textReview") String textReview,
@Part("rating") Integer rating);
А ApiClient выглядит следующим образом:
Здесь мой проект интегрирован с библиотекой Dagger.
@Singleton
public class ApiClient {
@Inject
ApiClient() {
}
private static Retrofit retrofitBaseURL = null;
private static Retrofit retrofitGOOGLEURL = null;
public static Retrofit getClient(Context context, String base_url) {
if (NetworkUtility.isNetworkAvailable(context)) {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor)
.readTimeout(180, TimeUnit.SECONDS)
.connectTimeout(180, TimeUnit.SECONDS)
.build();
if (null == retrofitBaseURL && base_url.equals(WebConstants.BASE_URL)) {
retrofitBaseURL = new Retrofit.Builder()
.baseUrl(base_url)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
} else if (null == retrofitGOOGLEURL && base_url.equals(WebConstants.GOOGLE_BASE_URL)) {
retrofitGOOGLEURL = new Retrofit.Builder()
.baseUrl(base_url)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return base_url.equals(WebConstants.BASE_URL) ? retrofitBaseURL : retrofitGOOGLEURL;
} else {
SnapXToast.showLongToast(context, "");
return null;
}
}
}
Вот мой запрос на модернизацию, в котором я хочу загрузить изображение и аудиофайл на сервер aws. И функция модернизации выглядит следующим образом:
public void sendReview(String restId, Uri image, Uri audio, String txtReview, Integer rating) {
if (NetworkUtility.isNetworkAvailable(mContext)) {
ApiHelper apiHelper = ApiClient.getClient(mContext, BASE_URL).create(ApiHelper.class);
String fileImagePath = getRealPathFromURIPath(image, mContext);
String fileAudioPath = getRealPathFromURIPath(audio, mContext);
File fileImg = new File(fileImagePath);
File fileAud = new File(fileAudioPath);
RequestBody mFileImage = RequestBody.create(MediaType.parse("*/*"), fileImg);//here I tried with media type "image/*"
RequestBody mFileAudio = RequestBody.create(MediaType.parse("*/*"), fileAud);//here I tried with media type "audio/*"
MultipartBody.Part imageUpload = MultipartBody.Part.createFormData("dishPicture", fileImg.getName(), mFileImage);
MultipartBody.Part audioUpload = MultipartBody.Part.createFormData("audioReview", fileAud.getName(), mFileAudio);
Call<SnapNShareResponse> snapXUserCall = apiHelper.sendUserReview(
utility.getAuthToken(mContext)
, restId, imageUpload, audioUpload, txtReview, rating);
snapXUserCall.enqueue(new Callback<SnapNShareResponse>() {
@Override
public void onResponse(Call<SnapNShareResponse> call,
Response<SnapNShareResponse> response) {
if (response.isSuccessful() && null != response.body()) {
SnapNShareResponse nShareResponse = response.body();
mReviewPresenter.response(SnapXResult.SUCCESS, nShareResponse);
SnapXToast.showToast(mContext,"yasss");
}
}
@Override
public void onFailure(Call<SnapNShareResponse> call, Throwable t) {
mReviewPresenter.response(SnapXResult.FAILURE, null);
}
});
} else {
mReviewPresenter.response(SnapXResult.NONETWORK, null);
}
}
// И получим ответ:
403 Запрещено http://ec2 -18-216-193-78.us-east-2.compute.amazonaws.com: 3000 / api / v1 / snapNShare (16878 мс)
X-Powered-By: Экспресс
Access-Control-Allow-Origin: *
04-29 22: 20: 29.685 9724-14733 / com.snapxeats D / OkHttp: Content-Type: application / json; кодировка = UTF-8
Длина контента: 36
ETag: W / "24-9ze4gN / 8B8Z0boWkFyxw9xuo9cA"
Дата: вс, 29 апреля 2018 16:50:30 по Гринвичу
Подключение: keep-alive
04-29 22: 20: 29.690 9724-14733 / com.snapxeats D / OkHttp: {"message": "Пользователь не аутентифицирован"}
Нужно ли отдельно добавлять часть "Заголовок" в мой запрос?
Также в logcat для изображений и аудио я получаю такие журналы:
Jp? PANynndʖVg8C # 凨 4h7qL- ߾ ~
h41 BF 4 & T \ y q A I Rj @ НJ ) 2 RAo = ϐ.- hH $ nGx { P ռ qM < 5 l sI q
--cd1c8557-c8c3-498f-80ac-3434f9d19840
Content-Disposition: форма-данные; Name = "audioReview"; имя файла = "AUD_20180429_213143.mp3"
Тип содержимого: /
Длина контента: 4603
// то же самое для изображения
Для «Неожиданного EOF» я добавил «mPlayer.release ();» что устранило ошибку.
Кто-нибудь может мне помочь, в какой части я скучаю? Я проверил с именами файлов для изображений и аудио; они успешно сохранены в локальном. И с помощью:
// Модификация
реализация 'com.squareup.retrofit2: дооснащение: 2.2.0'
реализация 'com.squareup.retrofit2: converter-gson: 2.1.0'
Пожалуйста, дайте мне сейчас, если мне нужно добавить больше информации относительно моего запроса.
Спасибо !!