본문 바로가기

안드로이드

안드로이드 이미지 업로드 (retrofit)


PHP 소스

<?php
$file_path = "";
$var = $_POST['result'];
$file_path = $file_path . basename( $_FILES['uploaded_file']['name']);
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) {
$result =array("result" => "success", "value" => $var);
} else{
$result = array("result" => "error");
}
echo json_encode($result);
?>

안드로이드 소스 (Activity)

//파일 생성 //img_url은 이미지의 경로
File file = new File(img_url);
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("uploaded_file", file.getName(), requestFile);
Call<Result> resultCall =inquire_interface.uploadImage(body);
resultCall.enqueue(new Callback<Result>() {
@Override
public void onResponse(Call<Result> call, Response<Result> response) {
}
@Override
public void onFailure(Call<Result> call, Throwable t) {
}
});


안드로이드 (Interface)

//사용자가 프로필 이미지를 변경했을때 해당 이미지를 서버로 전송하는 통신
@Multipart
@POST("sketch_up/image/upload_img.php")
Call<Result> uploadImage(@Part MultipartBody.Part File);

==================================================================================================


에러 사항


 내 경우 이미지가 정상적으로 upload되지 않고 결과가 'error' 가 나왔다.


그래서 다음 명령어로 file에 어떤 에러가 있는지 확인해 보았다.

$result = $_FILES['uploaded_file']['error'];

결과는 '1' 이 나왔다.


1의 결과가 어떤것인지 확인해보았다.


출처: http://www.dontorz.com/bbs/?mode=view&bbsid=study&ctg_cd=php&bltn_seq=3 


1은 업로드된 파일의 크기가 php.ini 에서 선언된 upload_max_filesize 보다 큼 이였고 phpinfo로 나의 upload_max_filesize를 확인했다.


확인결과 다음과 같이 최대 2M까지만 upload가 가능했다.



그렇지만 내가 업로드한 사진의 크기는 다음과 같았다.




그래서 php.ini에서 upload_max_filesize를 10M로 변경하고 서버를 재실행하고나니 정상적으로 작동됬다.


------------------------------------------------------------------------------------------------------------------------


2018-12-24 추가사항


예전에 업로드된 글을 하나씩 읽고있는중에 이 소스를 봤을때 다시 작성한다면 php소스에서 압축알고리즘을 넣어서 다시 작성할 것 같다.


하나의 사진이 2.34MB라면 너무 큰 사진크기인것같다.