2015-03-11 14 views
2
public int uploadFile(String sourceFileUri) { 
     int screenHeight = 800; 
     int screenWidth = 600; 
     HttpURLConnection conn = null; 
     DataOutputStream dos = null; 
     String lineEnd = "\r\n"; 
     String twoHyphens = "--"; 
     String boundary = "*****"; 
     int bytesRead, bytesAvailable, bufferSize; 
     byte[] buffer; 
     int maxBufferSize = 1 * 1024 * 1024; 
     File sourceFile = new File(sourceFileUri); 
     String fileName = sourceFile.getAbsolutePath(); 
     Log.d("file path",sourceFile.toString()); 
     if (!sourceFile.isFile()) { 
      dialog.dismiss(); 
      Log.e("uploadFile", "Source File not exist :" +imagePath); 
      return 0; 
     } 
     else 
     { 
      try { 
       upLoadServerUri = "http://192.168.3.40:8090/PHP/fileUpload.php"; 
       // open a URL connection to the Servlet 
       FileInputStream fileInputStream = new FileInputStream(sourceFile); 
       URL url = new URL(upLoadServerUri); 

       // Open a HTTP connection to the URL 
       conn = (HttpURLConnection) url.openConnection(); 
       conn.setDoInput(true); // Allow Inputs 
       conn.setDoOutput(true); // Allow Outputs 
       conn.setUseCaches(false); // Don't use a Cached Copy 
       conn.setRequestMethod("POST"); 
       conn.setRequestProperty("Connection", "Keep-Alive"); 
       conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
       conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
       conn.setRequestProperty("uploaded_file", fileName); 

       dos = new DataOutputStream(conn.getOutputStream()); 

       dos.writeBytes(twoHyphens + boundary + lineEnd); 
       dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename="+ fileName + "" + lineEnd); 
       dos.writeBytes(lineEnd); 

       // create a buffer of maximum size 
       bytesAvailable = fileInputStream.available(); 

       bufferSize = Math.min(bytesAvailable, maxBufferSize); 
       buffer = new byte[bufferSize]; 

       // read file and write it into form... 
       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); 

       } 

       // send multipart form data necesssary after file data... 
       dos.writeBytes(lineEnd); 
       dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

       // Responses from the server (code and message) 
       serverResponseCode = conn.getResponseCode(); 
       String serverResponseMessage = conn.getResponseMessage(); 

       Log.i("uploadFile", "HTTP Response is : "+ serverResponseMessage + ": " + serverResponseCode); 

       if(serverResponseCode == 200){ 

        runOnUiThread(new Runnable() { 
         public void run() { 

          Toast.makeText(PreviewImage.this, "File Upload Complete.", 
            Toast.LENGTH_SHORT).show(); 
         } 
        }); 
       } 

       //close the streams // 
       fileInputStream.close(); 
       dos.flush(); 
       dos.close(); 

      } catch (MalformedURLException ex) { 

       dialog.dismiss(); 
       ex.printStackTrace(); 

       runOnUiThread(new Runnable() { 
        public void run() { 

         Toast.makeText(PreviewImage.this, "MalformedURLException", 
           Toast.LENGTH_SHORT).show(); 
        } 
       }); 

       Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
      } catch (Exception e) { 

       dialog.dismiss(); 
       e.printStackTrace(); 

       runOnUiThread(new Runnable() { 
        public void run() { 

         Toast.makeText(PreviewImage.this, "Got Exception : see logcat ", 
           Toast.LENGTH_SHORT).show(); 
        } 
       }); 
       Log.e("Upload file to server Exception", "Exception : " 
         + e.getMessage(), e); 
      } 
      return serverResponseCode; 

     } // End else block 
    } 

Этот код отлично подходит для загрузки изображения на сервер. Но я хочу сжать изображение перед загрузкой. Я использовал этот код Bitmap resizedbitmap = Bitmap.createScaledBitmap (bitmap, screenWidth, screenHeight, true); Но это не работает. Как исправить эту проблему.Как сжать изображение перед загрузкой на сервер

+0

вы читали это http://voidcanvas.com/whatsapp-like-image-compression-in-android/ – jenuine

+0

Конечно, вы можете изменить размер e образ таким образом к растровому изображению. Но после этого вы должны загрузить это растровое изображение. Как вы пытались? – greenapps

ответ

4

Вы можете использовать ниже, чтобы сжать bitmap

для Jpeg изображений

Bitmap original = BitmapFactory.decodeStream(getAssets().open("imagg1.jpg")); 
ByteArrayOutputStream out = new ByteArrayOutputStream(); 
original.compress(Bitmap.CompressFormat.JPEG, 100, out); 
Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray())); 

и PNG изображений

Bitmap original = BitmapFactory.decodeStream(getAssets().open("imagg1.png")); 
ByteArrayOutputStream out = new ByteArrayOutputStream(); 
original.compress(Bitmap.CompressFormat.PNG, 100, out); 
Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray())); 
1

Если вы используете файл .png, тогда вы можете попробовать код ниже.

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 

Здесь 100 - качество изображения, и вы можете изменить его между 0 и 100, чтобы получить изображение с низким разрешением.

+0

Спасибо, он работал как шарм .. –

Смежные вопросы