사용자가 여러 이미지를 선택하여 서버에 업로드 할 수있는 앱을 만들고 있습니다. PHP를 백엔드로 사용 중이며 retrofit2입니다.Retrofit 2 및 PHP를 백 엔드로 사용하여 하나의 요청에 여러 개의 이미지를 업로드하는 방법?
나는 stackoverflow에서 모든 대답을 시도했지만 여전히 해결하지 못했습니다. 전송 파일
Retrofit builder = new Retrofit.Builder().baseUrl(ROOT_URL).addConverterFactory(GsonConverterFactory.create()).build();
FileUploadService fileUploadService = builder.create(FileUploadService.class);
Call<Response> call = fileUploadService.uploadImages(list)
for (Uri fileUri : path) {
MultipartBody.Part fileBody = prepareFilePart("files", fileUri);
images.add(fileBody);
}
Call<Response> call=fileUploadService.uploadImages(images);
call.enqueue(new Callback<Response>() {
@Override
public void onResponse(Call<Response> call, Response<Response> response) {
Log.e("MainActivity",response.body().toString());
progressDialog.show();
}
@Override
public void onFailure(Call<Response> call, Throwable t) {
Toast.makeText(MainActivity.this, t.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
Log.e("MainActivity",t.getLocalizedMessage());
progressDialog.dismiss();
}
});
}
에 대한
@Multipart
@POST("URL/uploadImages.php")
Call<Response> uploaImages(
@Part List< MultipartBody.Part> files);
코드는 여기에 내 PHP 코드입니다.
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
// Loop $_FILES to exeicute all files
foreach ($_FILES['files']['name'] as $f => $name) {
if ($_FILES['files']['error'][$f] == 4) {
continue; // Skip file if any error found
}
if ($_FILES['files']['error'][$f] == 0) {
if ($_FILES['files']['size'][$f] > $max_file_size) {
$message[] = "$name is too large!.";
continue; // Skip large files
}
elseif(! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats)){
$message[] = "$name is not a valid format";
continue; // Skip invalid file formats
}
else{ // No error found! Move uploaded files
if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path.$name))
$count++; // Number of successfully uploaded file
}
}
}
}
해결 방법 :
나는 "file[]"
에 "file"
에서 MultipartBodt.Part
의 이름을 변경 .and $_FILES['file']
에서 그들을받을 수 있습니다 .. 난 문제를 알아 냈 ... 전통적인 양식으로하는 것과 동일합니다 ... 콘텐츠를 양식 데이터로 보내므로 내 preparFfile()
메서드를 수정하십시오.
시도 이 자습서 https://futurestud.io/tutorials/retrofit-2-how-to-upload-multiple-files-to-server –