2016-09-03 1 views
1

Ich möchte fünf Bilder in meiner App erfassen und schickte ihre Base64-String an den Server ohne zu komprimieren. Ich habe auf Google gesucht und viele Artikel gelesen, nachdem ich die Lösung gefunden habe, Base64-String ohne Komprimierung zu senden. Nun, was ich will, dass, wenn ich nur ein Bild sende, es erfolgreich zu meinem Server speichert, aber wenn ich zwei oder mehr als zwei Bilder sende, dann habe ich unten Fehler, ich bekomme nicht, was das Problem ist. Ich denke etwas, was ich falsch mache.Mehrere Bilder base64 String senden nicht auf Server ohne Komprimierung

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == getActivity().RESULT_OK) { 

      //user is returning from capturing an image using the camera 
      if (requestCode == CAMERA_CAPTURE) { 
       byte[] inputData=null; 
       //Uri uri = data.getData(); 
       //get the Uri for the captured image 
       Uri uri = picUri; 
       Log.d("picUri", uri.toString()); 

       InputStream iStream = null; 
       try { 
        iStream = getActivity().getContentResolver().openInputStream(uri); 
        inputData = getBytes(iStream); 
        encodedString = Base64.encodeToString(inputData, Base64.DEFAULT); 

       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       //carry out the crop operation 
       performCrop(); 

      } else if (requestCode == PIC_CROP) { 
       //get the returned data 
       Bundle extras = data.getExtras(); 
       //get the cropped bitmap 
       thePic = (Bitmap) extras.get("data"); 

       if (setInImageView.equals("1")) { 

        imageView1.setImageBitmap(thePic); 

        image1 =encodedString; 

       } else if (setInImageView.equals("2")) { 

        imageView2.setImageBitmap(thePic); 

        image2 = encodedString; 

       } else if (setInImageView.equals("3")) { 

        imageView3.setImageBitmap(thePic); 

        image3 = encodedString; 

       } else if (setInImageView.equals("4")) { 

        imageView4.setImageBitmap(thePic); 

        image4 = encodedString; 

       } else if (setInImageView.equals("5")) { 

        imageView5.setImageBitmap(thePic); 

        image5 = encodedString; 

        String str; 
        str = "1"; 

       } 

      } 
     } 
    } 



public void selectImage1() { 
     try { 
      //use standard intent to capture an image 
      Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      String imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/picture.jpg"; 
      File imageFile = new File(imageFilePath); 
      picUri = Uri.fromFile(imageFile); // convert path to Uri 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, picUri); 
      startActivityForResult(takePictureIntent, CAMERA_CAPTURE); 
     } catch (ActivityNotFoundException anfe) { 
      //display an error message 
      String errorMessage = "oops! your device doesn't support capturing images!"; 
      Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_SHORT).show(); 
     } 
    } 

    //OnClick for set Image in Image View 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.camera1: 
       // code 
       setInImageView="1"; 
       selectImage1(); 
       break; 
      case R.id.camera2: 
       // code 
       setInImageView="2"; 
       selectImage1(); 
       break; 
      case R.id.camera3: 
       // code 
       setInImageView="3"; 
       selectImage1(); 
       break; 
      case R.id.camera4: 
       // code 
       setInImageView="4"; 
       selectImage1(); 
       break; 
      case R.id.camera5: 
       // code 
       setInImageView="5"; 
       selectImage1(); 
       break; 

      default: 
       break; 
     } 
    } 


    public static byte[] getBytes(InputStream inputStream) throws IOException { 
     ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); 
     int bufferSize = 10240; 
     byte[] buffer = new byte[bufferSize]; 

     int len = 0; 
     while ((len = inputStream.read(buffer)) != -1) { 
      byteBuffer.write(buffer, 0, len); 
     } 
     return byteBuffer.toByteArray(); 
    } 

} 

Unten ist mein Fehler -

SoapFault - faultcode: 'soap:Server' faultstring: 'There was an exception running the extensions specified in the config file. ---> Maximum request length exceeded.' faultactor: 'null' detail: [email protected] 
+0

'schickte ihre base64-Zeichenfolge zum Server ohne Komprimierung '. Welche Art von Komprimierung? Ich verstehe nicht. Sie haben zunächst die Anzahl der Bytes um 30% erweitert, indem Sie in base64 codiert haben. Und jetzt ... Warum sprichst du über Kompression? – greenapps

+0

Danke Greenapps Ich habe deinen Punkt. Ich spreche über, weil ich viele Beispiele sah, aber ich bekomme nur 40kb Bildgröße, die für mich nicht nützlich ist, aber von diesem Code habe ich 1,4mb Größe des Bildes. Warum speichert es nicht alle fünf Bilder auf dem Server? Mache etwas falsch? –

+0

Mein Problem ist, ich möchte alle fünf Bilder speichern, aber es gibt Fehler, die ich in der obigen Frage erwähnt. Aber wenn ich nur ein Image sende, wird es auf dem Server gespeichert. –

Antwort

0

ich es gelöst und hoffen, dass es anderen hilft. Ich habe unter meinem Web-Service hinzufügen. Jetzt speichert es alle fünf Bilder erfolgreich und sehr gute Qualität und 1.40 MB Größe.

<configuration> 
    <system.web> 
     <httpRuntime maxRequestLength="1048576" /> 
    </system.web> 
</configuration> 
+0

1048576 ist 1.0 MB. – greenapps