Ich versuche, ein Video von Android-Gerät auf den Server mit Retrofit2 hochladen und am Ende erhalten Fehler 400 Fehlgeschlagen Anfrage. Unten ist die Implementierung. Könnte jemand helfen, den Fehler zu beheben?Video hochladen mit Retrofit2
public interface RetrofitService {
/**
* Upload Videos to Server
*/
@Multipart
@POST("store/S3")
Call<ResponseBody> uploadToServer(@Query("key") String ServerAPI,
@Query("mimetype") String videoMimeType,
@Query("path") String path,
@Query("container") String container,
@Query("policy") String policy,
@Query("signature") String signature,
@Part MultipartBody.Part video,
@Part("type") String videoType,
@Part("name") String videoName);
}
Client-Implementierung in helper.java
private void uploadVideos(String videUri, String policy, String signature){
String BASE_URL = "https://www.example.com/api/";
String EXAMPLE_API_KEY = "xebfc";
String mimeType = "video/mp4";
String path = "mezzanine_videos/";
String container = S3_BUCKET;
// use the FileUtils to get the actual file by uri
File videoFile = new File(videoUri);
// create RequestBody instance from file
RequestBody videoBody = RequestBody.create(MediaType.parse("video/*"), videoFile);
// MultipartBody.Part is used to send the actual file
MultipartBody.Part vFile = MultipartBody.Part.createFormData("video", videoFile.getName(), videoBody);
String videoType = "video/mp4";
String videoName = "video.mp4";
final Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
RetrofitService service = retrofit.create(RetrofitService.class);
Call<ResponseBody> call = service.uploadToServer(EXAMPLE_API_KEY, mimeType, path, container, policy, signature, vFile, videoType, videoName);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Log.d("Response", "Successful Response");
}
@Override
public void onFailure(Call call, Throwable t) {
Log.d("Response", "Failure Response");
}
}); }
Server-Implementierung funktioniert gut, weil ich wie unten eine gültige Antwort, indem Sie eine Locke Post.
curl -X POST -F [email protected] "https://www.example.com/api/store/S3?key= xebfc&mimetype=video%2Fmp4&path=mezzanine_videos/&container= S3_BUCKET&policy=ppppp&signature=ssss
Fügen Sie Ihrer Retrofit-Instanz den Protokollierungsabfanger hinzu und aktualisieren Sie die Frage bitte. Sind Sie sicher, dass Sie MediaType.parse ("video/*") anstelle von exact type und "video" als Teilname verwenden? –
Vielen Dank für Ihre Antwort @KonstantinBerkow, MediaType.parse ("video/*") oder MediaType.parse ("video") ergibt den gleichen Fehler. Ich werde den formatierten Logging Interceptor in ein bisschen hinzufügen. – Babs