2014-09-30 67 views
1

我已經在ImageView控件中顯示圖像,但是當我嘗試將圖像發送到遠程服務器,PHP服務器時,存儲在服務器中的圖像是最小化版本,沒有在imageview控件中捕獲的全尺寸圖像。Hoy獲取imageview圖像的完整大小?

public void onClick(View v) { 
      // CALL THIS METHOD TO GET THE URI FROM THE BITMAP 
      Uri tempUri = getImageUri(getApplicationContext(), imagen); 
      imagepath = getRealPathFromURI(tempUri); 
      Log.i("uploadFile", "File Path : " 
        + imagepath); 
      // CALL THIS METHOD TO GET THE ACTUAL PATH 
      //File finalFile = new File(getRealPathFromURI(tempUri)); 

      dialog = ProgressDialog.show(DisplayImgCamActivity.this, "", "Subiendo imagen...", true); 
      //messageText.setText("uploading started....."); 
      new Thread(new Runnable() { 
       public void run() { 
         uploadFile(imagepath);   
       } 
       }).start();    
     } 

public int uploadFile(String sourceFileUri) {   
    String fileName = sourceFileUri; 

    //Log.i("uploadFile", "File Uri : " 
     //  + fileName); 


    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); 

    if (!sourceFile.isFile()) { 

     dialog.dismiss(); 

     Log.e("SubirImagen", "No existe la imagen :" + imagepath); 

     runOnUiThread(new Runnable() { 
      public void run() { 
       //messageText.setText("Source File not exist :"+ imagepath); 
       Toast.makeText(DisplayImgCamActivity.this, "No existe imagen a subir", Toast.LENGTH_LONG).show(); 
      } 
     }); 

     return 0; 

    } 
    else 
    { 
     try { 

       // open a URL connection to the Servlet 
      FileInputStream fileInputStream = new FileInputStream(sourceFile); 
      URL url = new URL(urlServer); 

      // 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() { 
          String msg = "File Upload Completed.\n\n See uploaded file here : \n\n" 
           +" F:/wamp/wamp/www/uploads"; 
          //messageText.setText(msg); 
          Toast.makeText(DisplayImgCamActivity.this, "Imagen subida satisfactoriamente", Toast.LENGTH_LONG).show(); 
         } 
        });     
      }  

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

     } catch (MalformedURLException ex) { 

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

      runOnUiThread(new Runnable() { 
       public void run() { 
        //messageText.setText("MalformedURLException Exception : check script url."); 
        Toast.makeText(DisplayImgCamActivity.this, "MalformedURLException", Toast.LENGTH_LONG).show(); 
       } 
      }); 

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

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

      runOnUiThread(new Runnable() { 
       public void run() { 
        //messageText.setText("Got Exception : see logcat "); 
        Toast.makeText(DisplayImgCamActivity.this, "Error: ver logcat ", Toast.LENGTH_LONG).show(); 
       } 
      }); 
      Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e); 
     } 
     dialog.dismiss();  
     return serverResponseCode; 

    } // End else block 
    }  

public Uri getImageUri(Context inContext, Bitmap inImage) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); 
    return Uri.parse(path); 
} 

public String getRealPathFromURI(Uri uri) { 
    Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(idx); 
} 
+0

請給我們一些代碼,你到目前爲止有什麼? – Jack 2014-09-30 22:13:56

+0

我在我的問題中添加了一些代碼。看那個。 – Levimatt 2014-10-01 16:16:06

回答

0

不知道我理解的問題,但發生的事情是你送的是在ImageView的加載,並且是收到
這恰好是比什麼在ImageView的顯示尺寸更小的PHP的圖像,如果所以相同的是你在應用程序中的圖像很小,會發生什麼是相同的縮放imageview不,如果你可以幫助解決方案,對不起我的英語

編輯:我的意思是,圖像字節如果相同但沒有任何修改,在

+0

是的,我用相機捕捉圖像並將其放入imageview中。當我將imageview的圖像發送到php服務器時,發送的圖像比imageview中的圖像小。當我在圖像庫中看到圖像時使用相機拍攝的圖像具有完整尺寸 – Levimatt 2014-09-30 22:10:40

+0

我認爲發送的圖像必須與正在接收的圖像相同,請嘗試拍攝照片並將其保存到設備以處理多少字節後衛然後與php相比只是一個想法 – 2014-09-30 22:14:58

+0

imageview有寬度和高度尺寸。這可能是問題嗎? – Levimatt 2014-09-30 22:19:52

0

那麼,最後我可以結束腳本。最後,我選擇了將圖像存儲在智能手機中的完整路徑,而不是圖像視圖中顯示的圖像。在這種情況下,我可以得到我想要的完整圖像。在圖像視圖中顯示的圖像是存儲在手機中的圖像的最小化版本。