그레이들 추가
//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 "파일없음";
}
?>
'Kotlin' 카테고리의 다른 글
코틀린 이미지 절대경로 가지겨오기 (0) | 2018.12.11 |
---|---|
코틀린 retrofit2 데이터 전송 to php (0) | 2018.11.28 |
코틀린 안드로이드 php에서 json으로 받아오기 (0) | 2018.11.14 |
코틀린 엑티비티에서 프레그먼트로 데이터 전달 (0) | 2018.11.14 |
코틀린 Tedpermission 사용하기 (0) | 2018.11.12 |