Kotlin

코틀린 안드로이드 retrofit2 이미지 전송

Machine_웅 2018. 11. 22. 16:38
728x90
반응형

그레이들 추가

 

//Retrofit ( http 통신 관련 )
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:retrofit-converters:2.4.0'

// Gson 레트로핏 컨버터 레트로 핏과 버전을 맞춘다
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

 

 

인터페이스 생성  retrofit

 


interface retrofit_interface {
// api 를 관리해 주는 인터페이스


// 프로필 이미지 보내기
@Multipart
@POST("userProfile/setUserProfileImage.php/")
fun post_Porfile_Request(
@Part("userId") userId: String,
@Part imageFile : MultipartBody.Part): Call<String>


}

 

사용

 

fun testRetrofit(path : String){

//creating a file
val file = File(path)
var fileName = userData.user_Id.replace("@","").replace(".","")
fileName = fileName+".png"


var requestBody : RequestBody = RequestBody.create(MediaType.parse("image/*"),file)
var body : MultipartBody.Part = MultipartBody.Part.createFormData("uploaded_file",fileName,requestBody)

//The gson builder
var gson : Gson = GsonBuilder()
.setLenient()
.create()


//creating retrofit object
var retrofit =
Retrofit.Builder()
.baseUrl(ipAddress)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()

//creating our api

var server = retrofit.create(retrofit_interface::class.java)

// 파일, 사용자 아이디, 파일이름

server.post_Porfile_Request(userData.user_Id,body).enqueue(object:Callback<String>{
override fun onFailure(call: Call<String>, t: Throwable) {
Log.d("레트로핏 결과1",t.message)
}

override fun onResponse(call: Call<String>, response: Response<String>) {
if (response?.isSuccessful) {
Toast.makeText(getApplicationContext(), "File Uploaded Successfully...", Toast.LENGTH_LONG).show();
Log.d("레트로핏 결과2",""+response?.body().toString())
} else {
Toast.makeText(getApplicationContext(), "Some error occurred...", Toast.LENGTH_LONG).show();
}
}
})
}

1. 절대경로 uri 를 가지고 파일을 만든다.

2. (생략가능) 파일 이름을 정해준다.

3. RequestBody를 만들어 준다  mediatype는 이미지로..

4. 멀티파츠 바디를 만들어준다 

 createFormData안에 인자는 

 php 에서 $_FILE에서 받을 이름, 파일 이름, 그리고 위에서 만든 RequestBody를 넣어준다.

 

5. 레트로핏 빌더 생성

 

 

    //The gson builder
    var gson : Gson  =  GsonBuilder()
            .setLenient()
            .create()


    //creating retrofit object
    var retrofit =
Retrofit.Builder()
            .baseUrl(ipAddress)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build()

를 통해서  레트로핏 빌더를 만들어주고

 

6. 인터페이스를 레트로핏에 적용

var server = retrofit.create(retrofit_interface::class.java)

 

7. 인터페이스에서 사용할 메소드를 호출하면서 실행

server.post_Porfile_Request(userData.user_Id,body).enqueue(object:Callback<String>{
        override fun onFailure(call: Call<String>, t: Throwable) {
            Log.d("레트로핏 결과1",t.message)
        }

        override fun onResponse(call: Call<String>, response: Response<String>) {
            if (response?.isSuccessful) {
                Toast.makeText(getApplicationContext(), "File Uploaded Successfully...", Toast.LENGTH_LONG).show();
                Log.d("레트로핏 결과2",""+response?.body().toString())
            } else {
                Toast.makeText(getApplicationContext(), "Some error occurred...", Toast.LENGTH_LONG).show();
            }
        }
    })

 

PHP 에서 코드

<?php
header("Content-Type:text/html;charset=utf-8");

 

$userId = $_POST['userId'];

 

// 파일 받기
$profile_File =$_FILES['uploaded_file']['name'];

 

// 저장할 경로
$file_name =$_SERVER['DOCUMENT_ROOT']. '/디렉터리명/';
$tempData = $_FILES['uploaded_file']['tmp_name'];
$name = basename($_FILES["uploaded_file"]["name"]);

 

// // 임시폴더에서  ->  경로 이동 .파일이름

if(isset($profile_File)){
 if(move_uploaded_file($tempData, $file_name.$name)){
  echo "완료";
 }else{
  echo "실패";
 }
}else{
 echo "파일없음";
}

 ?>

728x90
반응형