마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

킷캣 WebView에서 파일업로드 질문입니다.

0 추천

4.4.4 안드로이드 버젼이고, Webview에서 특정 모바일 웹사이트를 감쌌습니다.

<input type="file" 태그에 대한 문제를 해결중인데요.

 private ValueCallback<Uri> mUploadMessage;

mWebView.setWebChromeClient 에서  public void openFileChooser를 호출하여

 mUploadMessage = uploadMsg;  
         Intent i = new Intent(Intent.ACTION_GET_CONTENT);  
         i.addCategory(Intent.CATEGORY_OPENABLE);  
         i.setType("image/*");  
         startActivityForResult( Intent.createChooser( i, "사진을 선택하세요" ),    MainActivity.FILECHOOSER_RESULTCODE );  
 
파일 업로드 되도록 했습니다. 
 
protected  void onActivityResult(int requestCode, int resultCode, Intent intent) { 에서 
 
 
if (requestCode == GALLERY_KITKAT_INTENT_CALLED) {
 if (null == mUploadMessage)
         return;
      result = intent == null || resultCode != RESULT_OK ? null
             : intent.getData();
      Log.e("통과",result.getPath());
      
      //  /external/images/media/34430
 
      
      mUploadMessage.onReceiveValue(result);
      mUploadMessage = null;
   }
 
 
파일 선택화면까지 잘 나오지만 선택후에 <input type="file" 태그에 "34430" 가 들어가네요.
 
4.1.2 버젼에서는 파일 명이 들어가는데...... 킷캣에서는 숫자가.... 로그를 찍어봐도 도무지 알수가 없네요.
 
따로 처리를 더 해주어야 하는것이 있을까요?
 
 
포스코 (1,490 포인트) 님이 2014년 12월 18일 질문

2개의 답변

0 추천
 
채택된 답변
저도 해당부분을 처리하기 위해 찾아봤으나

4.4 버전대에서는 openFileChooser가 불러지지 않거나, 파일이 정상적으로 업로드 되지 않거나, 일부에서는 정상적으로 동작하거나 라는 답변을 얻었습니다.

정 필요하시면 업로드 부분을 별도로 처리하시고 해당페이지에서 기 업로드 된 파일의 이름을 받아오는 형태로 구현하시면 됩니다.

해당부분을 다르게 처리하셨다는 분이 있으시던데 대부분 소스가 공개되지 않았더군요.

다른분들은 어떨지 모르겠네요
냉동참치 (2,340 포인트) 님이 2014년 12월 18일 답변
포스코님이 2015년 3월 5일 채택됨
답변 감사합니다 ^^  

검색을 해보면 JavascriptInterface 로 처리하거나 폰갭으로 감싸서 플러그인으로 처리를 하는 방법들은 있더라고요.  하지만 저같은 경우는 모바일웹사이트를 수정하지 않고서 웹뷰에서 동작되게 하고 싶은것이 목적이어서....

4.4.4 버젼은 그래도 정상 동작한다고 하는데,
위에 언급드리것처럼 <input type="file" 에 엉뚱한 파일업로드  숫자값이 들어가는 이유를 모르겠네요 ㅎㅎ....

크롬이나 네이버 앱(4.4.2 제외)같은 브라우져들을 보면 처리가 잘되어 있던데...
아.. 저도 4.4버전대에서는 4.4.2에서 정상동작 안하는거보고 다르게 처리한거밖에 업성서 4.4.4에서는 안해봤네요..

위에 적힌거랑 별다른건 없지만 저는 이렇게 호출했었습니다.

Intent i = new Intent();
if (Build.VERSION.SDK_INT >= 19) {
    i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
} else {
    i = new Intent(Intent.ACTION_PICK);
}

i.setType("image/*, video/*");

도움이 못되서 죄송하네요 ^^;
아니에요. 답변주셔서 감사합니다 ~ ^^;;
0 추천
결과값이 /external/images/media/34430 로 넘어온 것 같습니다.

이걸 그냥 쓰면 당연히 34430로 표시됩니다.
익명사용자 님이 2014년 12월 18일 답변
답변 감사합니다.

4.4 이전 버젼도  

@Override
protected  void onActivityResult(int requestCode, int resultCode, Intent intent) {

result= intent.getData();

result.getPath() => 로그 찍어보면  /external/images/media/34430 와 같이 넘어오지만

<input type="file" 에 정상적으로 파일명으로 입력됩니다.

하지만 4.4.4. 버전에서는 34430으로 표시됩니다. 따라서 킷캣 버전에서는 <input type="file" 를

정상적으로 값이 입력되게하려면 다른 처리가 필요한지가 궁금한 것입니다.
파일 업로드 기능 자체가 4.4까지는 공식 API가 아닙니다.
4.3까지는 "운이 좋아서" 파일명을 제대로 표시했던 것입니다.
답변 감사합니다~  

target 모바일 웹페이지 수정없이

제대로 동작하는 앱들(돌핀, 네이버앱, 크롬, 기본 브라우져등등)에서는

이러한 이슈들을 해결했더군요. 하지만 검색해보면 잘 나오지가 않아서,

냉동참치님 말씀대로 노하우이기 때문에 공개가 되지 않는것인지 싶기도하네요 ㅎㅎ..
...