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


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

현재 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);
    }



조회수 891


1 답변


좋아요
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을 저장해야하는 것이 아니라면 위와 같은 방식으로 구조를 변경하는게 어떨까 싶습니다.


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close