이미지 파일 전송시 서버에서 구현할 PHP 소스는 다음과 같다.
개인 프로필 사진을 업로드할 경우의 수정사항이다.
<?php if(isset($_POST['idx']) && $_POST['idx']>0){ $idx=$_POST['idx'];
$file_path='./photos/'.$idx.'.jpg'; //이미지화일명은 인덱스번호로 지정 if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) { $result = array("result" => "success"); } else{ $result = array("result" => "error"); } echo json_encode($result); } ?> |
안드로이드 수정사항
Button btn_UploadPhoto = (Button) findViewById(R.id.btn_Upload); // 사진 업로드 btn_UploadPhoto.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (TextUtils.isEmpty(imagePath)) { Toast.makeText(getApplicationContext(), "업로드할 사진을 선택해주세요", Toast.LENGTH_SHORT).show(); } else { if (NetworkHelper.checkConnection(mContext)) { // 인터넷 연결 체크 Log.d("Photo", "Photo Upload Task Start"); String ImageUploadURL = Value.IPADDRESS + "/upload.php"; SharedPreferences pref = getSharedPreferences("pref", Activity.MODE_PRIVATE); String idx = pref.getString("idx", ""); ImageUploadTask imageUploadTask = new ImageUploadTask(); imageUploadTask.execute(ImageUploadURL, imagePath, idx); } else { Toast.makeText(mContext, "인터넷 연결을 확인하세요", Toast.LENGTH_LONG).show(); } } } });
|
class ImageUploadTask extends AsyncTask<String, Integer, Boolean> { ProgressDialog progressDialog; // API 26에서 deprecated
@Override protected void onPreExecute() { super.onPreExecute(); progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setMessage("이미지 업로드중...."); progressDialog.show(); }
@Override protected Boolean doInBackground(String... params) { try { JSONObject jsonObject = JSONParser.uploadImage(params[0],params[1],params[2]); if (jsonObject != null) return jsonObject.getString("result").equals("success");
} catch (JSONException e) { Log.i("TAG", "Error : " + e.getLocalizedMessage()); } return false; }
@Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); if (progressDialog != null) progressDialog.dismiss();
if (aBoolean){ Toast.makeText(getApplicationContext(), "파일 업로드 성공", Toast.LENGTH_LONG).show(); // 임시 파일 삭제 (카메라로 사진 촬영한 이미지) if(mImageCaptureUri != null){ File file = new File(mImageCaptureUri.getPath()); if(file.exists()) { file.delete(); } mImageCaptureUri = null; } imagePath = null; } else{ Toast.makeText(getApplicationContext(), "파일 업로드 실패", Toast.LENGTH_LONG).show(); }
} } |
public class JSONParser {
public static JSONObject uploadImage(String imageUploadUrl, String sourceImageFile, String idx) { final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/*");
try { File sourceFile = new File(sourceImageFile); Log.d("TAG", "File...::::" + sourceFile + " : " + sourceFile.exists()); String filename = sourceImageFile.substring(sourceImageFile.lastIndexOf("/")+1);
// OKHTTP3 RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("uploaded_file", filename, RequestBody.create(MEDIA_TYPE_PNG, sourceFile)) .addFormDataPart("idx", idx) .build();
Request request = new Request.Builder() .url(imageUploadUrl) .post(requestBody) .build();
OkHttpClient client = new OkHttpClient(); Response response = client.newCall(request).execute(); if (response != null) { if (response.isSuccessful()) { String res = response.body().string(); Log.e("TAG", "Success : " + res); return new JSONObject(res); } } } catch (UnknownHostException | UnsupportedEncodingException e) { Log.e("TAG", "Error: " + e.getLocalizedMessage()); } catch (Exception e) { Log.e("TAG", "Other Error: " + e.getLocalizedMessage()); } return null; } } |