찍은 사진, 앨범에서 찾아온 사진을 Bitmap에서 compress해서 test.jpeg라는 파일로 저장을 합니다.


그리고 그 그 경로 그대로 전송하는 방법인데 앨범에서 가져온 사진은 잘 넘어간느데 사진으로 찍어서 저장한 사진은


넘어가질 않고 에러가 나네요. 분명히 찍자마자 경로로 imageView에 표시해보면 크기 차이는 있지만 생성된 test.jpeg파일이 있구요.


그리고 재미있는건 사진으로 찍은 사진을 보내다가 실패한 뒤에 다시 앨범가서 앨범사진을 보내려고 하면 앨범 사진조차 안가지네요..


대체 어디서 문제가 있는건지 많은 고수님들의 자비를 부탁드립니다!!!!!!!!!!!!!!!


아래는 앨범이나 카메라로 찍은 사진을 가져와서 새파일로 저장하고 화면에 표시해주는 코드입니다.

 //카메라로 찍기
	public void takePicture(){
		Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
	    startActivityForResult(intent, TAKE_CAMERA);
	}
	
	//갤러리 호출해서 이미지 읽어오기
    public void takeGallery(){
		Intent intent = new Intent();
		intent.setAction(Intent.ACTION_GET_CONTENT);
		intent.setType("image/*");
		startActivityForResult(intent, TAKE_GALLERY);	
    }
    
   
    
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       
		  if(resultCode == RESULT_OK){
			  
			 			  
			  if(requestCode == TAKE_CAMERA){ 
			            // 카메라로 사진을 찍은 후 Add 버튼을 눌렀는지 확인 한다.
			    		if( data != null ){
			    			
			    			Bitmap thumbnail = (Bitmap)data.getExtras().get("data");
			    			
							try {
								fosBitmap = new FileOutputStream(new File("mnt/sdcard/dcim/camera/", "test.jpeg"));
								thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, fosBitmap);//성공
							} catch (FileNotFoundException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
			    						    			
			        		if( thumbnail != null ){    
			        			imageView.setImageBitmap(thumbnail);
			        			 fileName.setText("사진을 첨부하였습니다.");
			        			try {
									fosBitmap.close();
								} catch (IOException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
			        		}
			    		}
			    		
			  }else if(requestCode == TAKE_GALLERY){
		    			if( data != null ){
				    		Uri thumbnail = data.getData();
				    		
			    			try{
			    				Bitmap thumbnailImg = Images.Media.getBitmap(getContentResolver(), thumbnail);
								fosBitmap = new FileOutputStream(new File("mnt/sdcard/dcim/camera/", "test.jpeg"));
								thumbnailImg.compress(Bitmap.CompressFormat.JPEG, 30, fosBitmap);//성공
								
							} catch (FileNotFoundException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							} catch (IOException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
		    			
			        		if( thumbnail != null ){     
			        			//정보를 가져왔다면 표시해준다.
			        			imageView.setImageURI(thumbnail);
			        			 fileName.setText("사진을 첨부하였습니다.");
			        			 
			        		}
		        		}
			    }//else if
		}//result ok
    } 


여기는 파일을 전송하는 http 메소드 코드입니다.

 @Override
    public void run() {
    	Log.e("테스트", "run실행됨");
    	String url = "http://58.103.20.246:5000/NearMap/saveImage.jsp";
		String fileStr = "mnt/sdcard/dcim/camera/test.jpeg";
		
    	try{ 	
	     	
    	      //파일을 업로드할 서버의 url 주소를이용해서 URL 객체 생성하기.
    	      URL connectUrl = new URL("url);
    	      //Connection 객체 얻어오기. 
    	      HttpURLConnection conn = (HttpURLConnection)connectUrl.openConnection();   
    	      conn.setDoInput(true);//입력할수 있도록
    	      conn.setDoOutput(true); //출력할수 있도록
    	      conn.setUseCaches(false);  //캐쉬 사용하지 않음
    	      
    	      //post 전송
    	      conn.setRequestMethod("POST");
    	      //파일 업로드 할수 있도록 설정하기.
    	      conn.setRequestProperty("Connection", "Keep-Alive");
    	      conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
    	      //선택한 파일의 절대 경로를 이용해서 파일 입력 스트림 객체를 얻어온다.
    	      //DataOutputStream 객체 생성하기.
    	      dos = new DataOutputStream(conn.getOutputStream());
    	      Iterator<String> iterator = map.keySet().iterator();
    	      //문자 전송구간
    	      while (iterator.hasNext()){
    	    	  
    	    	  	String key = (String)iterator.next();
    	    	    dos.writeBytes(twoHyphens + boundary + lineEnd); //필드 구분자 시작
    	    	    dos.writeBytes("Content-Disposition: form-data; name=\""+key+"\""+ lineEnd);
    	    	    dos.writeBytes(lineEnd);
    	    	    dos.writeBytes(map.get(key));
    	    	    dos.writeBytes(lineEnd);  
    	    	    dos.flush();
    	    	    Log.e("테스트", map.get(key));
    	      }
    	      
    	      //파일 전송 구간
    	      fis = new FileInputStream(fileStr); 
    	      bis = new BufferedInputStream(fis);
    	      
			  dos.writeBytes(twoHyphens + boundary + lineEnd);
    	      dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" +fileStr+"\"" + lineEnd);
    	      dos.writeBytes(lineEnd);
    	      dos.flush();
    	      
    	      bos = new BufferedOutputStream(dos);
    	      //ps = new PrintStream(bos, true);
    	      //한번에 읽어들일수있는 스트림의 크기를 얻어온다.
    	      //int bytesAvailable = fis.available();
    	      //int maxByte = 1024*1024;   
    	      //byte단위로 읽어오기 위하여 byte 배열 객체를 준비한다.
    	      byte[] buffer = new byte[1024*1024];
    	      int bytesRead = 0;
    	      // read image
    	      while((bytesRead=bis.read(buffer))!=-1) {
    	       //파일에서 바이트단위로 읽어온다.
    	       //bytesRead = bis.read(buffer);
    	       if(bytesRead==-1)break; //더이상 읽을 데이터가 없다면 빠저나온다.
    	          Log.d("Test", "image byte is " + bytesRead);
    	          //읽은만큼 출력한다.	
      	        bos.write(buffer, 0, bytesRead);
  				bos.flush();
  			   
    	       //출력한 데이터 밀어내기
    	       //dos.flush();
    	      } 
    	      //전송할 데이터의 끝임을 알린다.
    	      dos.writeBytes(lineEnd);
    	      dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
    	      dos.flush();//밀어내기
    	      
    	      
    	      //Toast.makeText(MainActivity.this, "전송종료", 0).show();
    	      // get response
    	      int ch;
    	      //입력 스트림 객체를 얻어온다.
    	      InputStream is = conn.getInputStream();
    	      StringBuffer b =new StringBuffer();
    	      while( ( ch = is.read() ) != -1 ){
    	       b.append( (char)ch );
    	      }
    	      String s=b.toString(); 
    	      Log.e("Test", "result = " + s);
    	      
	      	Message msg=new Message();
  			msg.what=0; //성공
  			msg.obj = (Object)s;
      		saveHandler.sendMessage(msg);
    	      
  	       } catch (Exception e) {
    	        Log.d("Test", "exception " + e.getMessage());
    	        //Toast.makeText(this,"업로드중 에러발생!", 0).show();
    	        Message msg=new Message();
        		msg.what=1; //실패
        		msg.obj = "데이터 저장 실패";
        		saveHandler.sendMessage(msg);
  	       }finally{
  	    	    try {
  	    	    	if(dos!=null)dos.close();
					if(fis!=null)fis.close();
					if(bis!=null)bis.close();
	 		    	if(bos!=null)bos.close();
	 		    	//if(ps!=null)ps.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
 				
  	    	    	    	  
  	       }
    	
    }