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

사진을 찍거나 갤러리에 있는 사진을 서버에 업로드 하고있는 중입니다.

0 추천
FileInputStream fileInputStream = new FileInputStream(sourceFile);
				URL url = new URL(Const.UPLOAD + uid);
	            
	            http = (HttpURLConnection) url.openConnection();           
	            http.setDoInput(true); 
	            http.setDoOutput(true); 
	            http.setUseCaches(false); 
	            http.setRequestMethod("POST");
	            http.setRequestProperty("Connection", "Keep-Alive");
	            http.setRequestProperty("ENCTYPE", "multipart/form-data");
	            http.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
	            http.setRequestProperty("uploaded_file", fileName);
	            
	            dos = new DataOutputStream(http.getOutputStream());
	            
                dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: form-data; name=\"upload\";filename=\""
                        + fileName + "\"" + lineEnd);
                 
                dos.writeBytes(lineEnd);
      
                bytesAvailable = fileInputStream.available();
      
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                buffer = new byte[bufferSize];
      
                bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
	            
				while (bytesRead > 0) {

					dos.write(buffer, 0, bufferSize);
					bytesAvailable = fileInputStream.available();
					bufferSize = Math.min(bytesAvailable, maxBufferSize);
					bytesRead = fileInputStream.read(buffer, 0, bufferSize);

				}

				dos.writeBytes(lineEnd);
				dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

				serverResponseCode = http.getResponseCode();
				String serverResponseMessage = http.getResponseMessage();

				Log.e(Const.LOGCAT, "HTTP Response is : "
						+ serverResponseMessage + ": " + serverResponseCode);

				InputStreamReader tmp = new InputStreamReader(
						http.getInputStream(), "UTF-8");
				BufferedReader reader = new BufferedReader(tmp);
				final StringBuilder builder = new StringBuilder();
				String str;
				while ((str = reader.readLine()) != null) { // 서버에서 라인단위로
															// 보내줄 것이므로
															// 라인단위로 읽는다
					builder.append(str + "\n"); 
				}

				if (serverResponseCode == 200) {
					runOnUiThread(new Runnable() {
						public void run() {
							Log.e(Const.LOGCAT, getClass().getName()+" ---> myResult : "+builder);			
						}
					});
				}

				fileInputStream.close();
				dos.flush();
				dos.close();

사진을 찍거나 갤러리에서 선택한 사진을 구축한 서버에 업로드 하려고 하는데

사진이 업로드 되는것은 문제가 없지만

업로드 되는 시간동안 프로그레스 다이얼로그로 띄우게끔 해놓았는데요

업로드가 빨리 될때에는 2~3초 사이에 업로드 되는데

가끔씩 20초가 넘을때까지 업로드가 되는건지 어쩐지 프로그레스 다이얼로그가 20초 동안 돌고 있습니다.

이경우 제 생각에 소켓과의 통신이 끊겨서 다시 연결하려고 하는것 같은데요

예를들어 10초가 넘어가면 끊고 다시 업로드를 시키게끔 하고싶습니다.

한마디로 timeout을 걸고 싶습니다.

뱅구다 (11,280 포인트) 님이 2015년 2월 9일 질문

1개의 답변

0 추천
네트웤 속도문제 이거나 이미지 파일의 크기 문제입니다.

 

서버에서 확인코드(200)가 안돌아올 경우 재전송하는 방법도 있습니다.
익명사용자 님이 2015년 2월 9일 답변
...