Bitmap 파일을 mysql에 어떻게 Insert 하나요?

조회수 4780회

모바일 커뮤니티 어플리케이션을 만들고 있습니다.

현재 Facebook으로 로그인을 하여 Bitmap 형식으로 프로필 사진을 받아온 상태 입니다.

회원의 정보를 mysql에 저장하고 싶은데, Bitmap 형식을 String으로 변환하여 저장하려고

하니 스트링 길이값이 3900이 넘었습니다.

php를 통해서 전달하려고 하였으나 전달이 되지 않았습니다.

어떻게 해야 Bitmap 파일 형식을 mysql에 저장할 수 있을까요?

아래는 php 와 안드로이드에서 upload하는 httpConnect 코드 부분입니다.

             ....
        $profilePic=$_GET['userImageString'];
        $con=mysqli_connect("####","####","####","####") or die("접속불가");
            #require_once('dbConnect.php');         
        $sql = "INSERT INTO songDB(username,userID,songName,contents,filepath,profilePic) 
                VALUES('$username','$userID','$songName','$contents','$filepath','$profilePic')";
    if(mysqli_query($con,$sql)){
        echo 'successfully Upload';
    }else{
        echo 'oops! Please try again!';
    }      

    private void uploadSongDB() {    
         ...
        Bitmap userImage=MainActivity.UserIDClass.getUserImage();
        String userImageString=BitMapToString(userImage);

        String urlSuffix = "?username="+userName+"&userID="+userID+"&songName="+songName+"&contents="
                      +contents+"&filepath="+filepath+"&userImageString"+userImageString;

        class RegisterUser extends AsyncTask<String, Void, String>{

            ProgressDialog loading;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(RecordActivity.this, "Please Wait",null, true, true);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                loading.dismiss();
                if(s.equals("successfully Upload")) {
                    Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(RecordActivity.this, UploadActivity.class);        
                    intent.putExtra("path", MainActivity.UserIDClass.getUploadFilepath());
                    startActivity(intent);
                    finish();

                }
                else{
                    Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();

                }
            }

            @Override
            protected String doInBackground(String... params) {
                String s = params[0];
                BufferedReader bufferedReader = null;
                try {
                    URL url = new URL(UPLOAD_URL+s);
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
                    bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));

                    String result;

                    result = bufferedReader.readLine();

                    return result;
                }catch(Exception e){
                    return null;
                }
            }
        }

        RegisterUser ru = new RegisterUser();
        ru.execute(urlSuffix);
    }


  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 안드로이드에서 업로드한 비트맵 파일을 서버에서 jpg 파일로 저장 후 mysql에 이미지 파일의 경로를 저장하는 것이 좀 더 일반적인 방법입니다. 프로필 이미지를 다시 사용하는 클라이언트(안드로이드) 입장에서도 웹상의 경로를 받는 것이 일반적이고요.

    예를 들면 hashcode 서버에서 제 프로필 사진을 다음과 같은 url로 제공한다면

    https://res.cloudinary.com/eightcruz/image/upload/c_lfill,h_32,w_32/qb0mjgu78t3hqjnztfr4

    안드로이드에서의 구현은 다음과 같은 방식이 됩니다.

    Picasso.with(getApplicationContext())
           .load("https://res.cloudinary.com/eightcruz/image/upload/c_lfill,h_32,w_32/qb0mjgu78t3hqjnztfr4)
           .into(photoView);
    

    추가로 이미지 로더 라이브러리들이 구현하고 있는 메모리, 파일 캐시의 Key로 url을 활용합니다. mysql에 반드시 bitmap을 저장해야하는 것이 아니라면 위와 같은 방식으로 구조를 변경하는게 어떨까 싶습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)