Bitmap 파일을 mysql에 어떻게 Insert 하나요?
조회수 5056회
모바일 커뮤니티 어플리케이션을 만들고 있습니다.
현재 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을 저장해야하는 것이 아니라면 위와 같은 방식으로 구조를 변경하는게 어떨까 싶습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 답변감사합니다. 서버에서 바이트 배열로 데이터를 받은 후 비트맵으로 변경하여 파일을 저장하라는 말씀이신가요? 안드로이드에서 바로 비트맵 파일을 서버로 어떻게 저장 할 수 있나요?. 알 수 없는 사용자 2016.5.19 19:28
- 이 부분은 구현하기 쉬운 방향으로 작업 하시면 될 것 같습니다. 첫번째 안은 안드로이드에서 비트맵을 Jpeg 파일로 변환 후 멀티파트로 이미지 파일을 서버로 업로드 시키는 방법이 있을 것 같고요. 두번째는 비트맵 자체를 String으로 변환 후 서버로 전송할 수 있을 것 같습니다. 변환 관련된 내용 및 업로드 관련은 다음 링크를 참고하세요. http://stackoverflow.com/questions/13562429/how-many-ways-to-convert-bitmap-to-string-and-vice-versa, http://stackoverflow.com/questions/20322528/uploading-images-to-server-android, http://stackoverflow.com/questions/21306720/uploading-image-from-android-to-php-server 알 수 없는 사용자 2016.5.19 22:36
- 정말정말 감사합니다!! 알 수 없는 사용자 2016.5.19 23:44
- 해결했습니다!! 감사합니다 ㅎㅎ 알 수 없는 사용자 2016.5.20 09:49
- 해결하셨다니 다행이네요 :D 알 수 없는 사용자 2016.5.20 10:28
-
댓글 입력