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

다중 업로드 질문입니다~ 소스는 무시하셔도됩니다.

0 추천
다중선택을 받은후 받은값들을 한번에 서버에 올리려고하는데

어떻게처리해야하나욤?

 

 ArrayList<String> picArr = new ArrayList<String>();

이곳에 사진경로가 다들어가있어욤

 

그뒤 소스

 

  case R.id.btnSelectOk:

 GalleryItem thumbInfo2 = new GalleryItem();
   thumbInfo2.setDatas(picArr);
//   int i=0;
   for(int i=0; i<picArr.size(); i++){
   mImageCameraUri = Uri.parse(String.valueOf(picArr.get(0)));
   Log.i("imgts", String.valueOf(mImageCameraUri));
   Log.i("imgts", "사이즈 :" +String.valueOf(picArr.size()));

   File original_file = CommonUtil
     .getImageFile(this, mImageCaptureUri);

   if (original_file == null) {
    Toast.makeText(getApplicationContext(), R.string.gallery_fetch_error,
      Toast.LENGTH_SHORT).show();
    mImageCaptureUri = null;
    return;
   }

   File copy_file = CommonUtil
     .createSaveCropFile(getApplicationContext(), SDCARD_FOLDER);
   mImageCaptureUri = Uri.fromFile(copy_file);
   // File cpoy_file = new File(mImageCaptureUri.getPath());

   // SD카드에 저장된 파일을 이미지 Crop을 위해 복사한다.
   CommonUtil.copyFile(original_file, copy_file);
   m_bPhotoCapture = true;
   m_arrDisPhotoList[m_nSelectedPhotoIndex] = mImageCaptureUri
     .getPath();
   m_arrCapturedPhotoPath[m_nSelectedPhotoIndex] = mImageCaptureUri
     .getPath();
   Log.i("imgts", String.valueOf(m_arrCapturedPhotoPath));
   Log.i("imgts", String.valueOf("onSave 전까지인가"));
   

   try {

    onSave();
    Log.i("imgts","i번째 값:"+String.valueOf(i));
    Log.i("imgts2","i번째 값:"+String.valueOf(i));
    Log.i("imgts","파일 i번째 경로:"+String.valueOf(original_file));
    
    if(i==picArr.size()){
     
     Log.i("imgts","이게맞나?");
     
    }
    
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    Log.i("imgts","자이건받나 에러코드: " + String.valueOf(e));
    
   }
   break;

   }

 

// 이미지 서버 저장
 private void onSave() throws IOException {

  String setNum = System.currentTimeMillis() + "";
  setNum = setNum.substring(setNum.length() - 6, setNum.length()); // 랜덤
  Log.i("imgts", "onSave에서 1. : "+String.valueOf(setNum));                   // 숫자
/*
  if (CommonUtil.getInternalMemorySize() < 1) {
   m_saveClick = false;
   return;
  }

  // 네트워크 상태를 체크한다.
  if (!BaseAsyncHttpClient.isNetworkAvaliable(m_app)) {
   Toast.makeText(this, R.string.network_connect_error,
     Toast.LENGTH_SHORT).show();
   return;
  }
  */
  
  Log.i("imgts", "onSave에서2 . : "+String.valueOf(setNum));

  SharedPreferences prefs = getSharedPreferences(PrefMgr.BayView_Prefs,
    Activity.MODE_PRIVATE);
  PrefMgr prefMgr = new PrefMgr(prefs);

  // 서버 요청 파라메터를 조합한다.
  RequestParams params = new RequestParams();

  params.put("res", REQ_FILEUPLOAD); // 요청
  // params.put("res", REQ_GETVERSION); // 요청

  Log.i("imgts", "onSave에서3 . : "+REQ_FILEUPLOAD);
 
  
  params.put("user_no", user_no);
  params.put("user_id", user_id);
  params.put("bo_table", bo_table);
 
  Log.i("imgts", "user_id : "+user_id);
  Log.i("imgts", "user_no : "+user_no);
  Log.i("imgts", "bo_table : "+bo_table);
  Log.i("imgts", "rnd : "+ setNum);
  
  // params.put("product_name", m_etName.getText().toString());
  // params.put("price", m_etPrice.getText().toString());

  // 수정 5:youtube url추가
  // params.put("youtube", m_youtube.getText().toString());
  params.put("rnd", setNum);

  InputStream in = null;

  try {

   if (m_arrDisPhotoList[m_nSelectedPhotoIndex].length() > 0) {
    File src = new File(m_arrDisPhotoList[m_nSelectedPhotoIndex]);
    Log.i("imgts", "TRY 진입" + String.valueOf(src));
    in = getCompressedImage(src);
    Log.i("imgts", "in 진입" + String.valueOf(in));
    
    params.put("thumb" + m_nSelectedPhotoIndex, in, "picture.jpg",
      "image/jpg");
   

    in.close();
   }
    if (m_arrDisPhotoList[1].length() > 0) { File src = new
     File(m_arrDisPhotoList[1]); in = getCompressedImage(src);
     params.put("thumb2", in, "picture.jpg", "image/jpg"); in.close();
    } if (m_arrDisPhotoList[2].length() > 0) { File src = new
    File(m_arrDisPhotoList[2]); in = getCompressedImage(src);
    params.put("thumb3", in, "picture.jpg", "image/jpg"); in.close();
     } if (m_arrDisPhotoList[3].length() > 0) { File src = new
    File(m_arrDisPhotoList[3]); in = getCompressedImage(src);
    params.put("thumb4", in, "picture.jpg", "image/jpg"); in.close();
    } if (m_arrDisPhotoList[4].length() > 0) { File src = new
   File(m_arrDisPhotoList[4]); in = getCompressedImage(src);
    params.put("thumb5", in, "picture.jpg", "image/jpg"); in.close();
    } if (m_arrDisPhotoList[5].length() > 0) { File src = new
     File(m_arrDisPhotoList[5]); in = getCompressedImage(src);
     params.put("thumb6", in, "picture.jpg", "image/jpg"); in.close();
    } if (m_arrDisPhotoList[6].length() > 0) { File src = new
   File(m_arrDisPhotoList[6]); in = getCompressedImage(src);
     params.put("thumb7", in, "picture.jpg", "image/jpg"); in.close();
     }

  } catch (FileNotFoundException e) {
   e.printStackTrace();
   Log.i("imgts", "catch 진입" + String.valueOf(e));
   }

  // 서버에 요청을 보낸다.
  // BaseAsyncHttpClient.showProgress(getActivity(), "",
  // getString(R.string.please_wait));

  Log.i("imgts", "TRY 끝" + String.valueOf("try 끝!"));
  progress.setVisibility(View.VISIBLE);
  Log.i("imgts", "progress 시작" + String.valueOf("progress ㅅㅈ!"));
  BaseAsyncHttpClient.post("", params, new AsyncHttpResponseHandler() {

   @Override
   public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
    Log.i("imgts", "onsuccess 시작" + String.valueOf("onsuces ㅅㅈ!"));
    ResponseResult result = BaseAsyncHttpClient.checkResultValue(
      getApplicationContext(), arg2);
    
    Log.i("imgts", "result값 " + String.valueOf(result));
    
    Log.i("imgts", "Async 진입");
    if (result.res_value == 0) {
     try {
      Log.i("imgts","0값진입인데 값을 안받나?");
      JSONObject jsObj = result.res_data;
     // MainActivity mainActivity = new MainActivity();
      wfile_name = jsObj.getString("file_name");
      Log.i("imgts", "wfilename " + String.valueOf(wfile_name));

      // MainActivity.web.loadUrl("javascript:img_chk('"
      // + m_nSelectedPhotoIndex + "','" + wfile_name
      // + "');");

      // Toast.makeText(m_app, R.string.registered,
      // Toast.LENGTH_SHORT).show();
     } catch (JSONException e) {
      BaseAsyncHttpClient.hideProgress();
      Toast.makeText(getApplicationContext(), R.string.data_parse_error,
        Toast.LENGTH_SHORT).show();
      Log.i("imgts", "Ascy 에러메시지: " + String.valueOf(e));

     }

    } else {

     Toast.makeText(getApplicationContext(), R.string.register_failed,
       Toast.LENGTH_SHORT).show();

    }
    // BaseAsyncHttpClient.hideProgress();
    progress.setVisibility(View.GONE);
   }

   @Override
   public void onFailure(int arg0, Header[] arg1, byte[] arg2,
     Throwable arg3) {
    Toast.makeText(getApplicationContext(), R.string.data_fetch_error,
      Toast.LENGTH_SHORT).show();
    // BaseAsyncHttpClient.hideProgress();
    progress.setVisibility(View.GONE);
    Log.i("imgts", "onFailure 진입" + String.valueOf("faill!!s"));
   }

   @Override
   public void onProgress(int bytesWritten, int totalSize) {
   }
  });
 }

 /**
  * 이미지 파일을 Jpg로 압축하여 반환
  *
  * @param src
  * @return
  */
 private InputStream getCompressedImage(File src) {

  InputStream is = null;
  Bitmap b = null;
  ByteArrayOutputStream stream = null;

  try {
   stream = new ByteArrayOutputStream();
   b = CommonUtil.decodeFile(src);
   b.compress(CompressFormat.JPEG, 100, stream);
   is = new ByteArrayInputStream(stream.toByteArray());

   return is;

  } catch (Exception e) {
   e.printStackTrace();

  } finally {
   try {
    stream.close();
   } catch (IOException e) {
    e.printStackTrace();
   } finally {
    if (stream != null)
     stream = null;
   }
   try {
    is.close();
   } catch (IOException e) {
    e.printStackTrace();
   } finally {
    if (is != null)
     is = null;
   }

   if (b.isRecycled() == false)
    b.recycle();

   b = null;
  }

  return null;
 }

 

결론은 다중업로드 어떻게 처리해야하나요 ?ㅜ
익명사용자 님이 2015년 10월 20일 질문

2개의 답변

+1 추천
업로드라고해서 나중에 파일을 찾을떄 결국 웹서버DB조회를 통해 가져올텐데 한번에 올릴수 없죠

하나씩 올리고 완료된 리턴값을 받아 다시 올리고 하는 방식이 있지 않을까요?
bangbang (8,820 포인트) 님이 2015년 10월 20일 답변
0 추천
retrofit 으로 간단하게 가능 합니다.

http://square.github.io/retrofit

 

익숙해지면 직접 코딩하는거보다 더 쉬워요 ~

if(image_1 != null) multipartTypedOutput.addPart("image_1", new TypedFile("image/*", new File(image_1)));
if(image_2 != null) multipartTypedOutput.addPart("image_2", new TypedFile("image/*", new File(image_2)));
if(image_3 != null) multipartTypedOutput.addPart("image_3", new TypedFile("image/*", new File(image_3)));

이런식으로  가능해져요
cmsypub (820 포인트) 님이 2015년 10월 21일 답변
...