2012-01-04 15 views
42

Chcę dodać plik obrazu do obiektu Json. Czy można dodać plik obrazu do obiektu Json?Jak mogę dodać plik obrazu do obiektu Json?

Próbowałem poniżej kodu, ale nie działa? Ponieważ chcę wysłać ten obiekt Json na serwer, serwer odczyta mój plik obrazu i zapisze go w bazie danych.

JSONObject test = new JSONObject(); 
test.put("photo",new File(// Here i set image uri)); 

Kiedy więc drukuję ten obiekt Json, pokazuje mi tylko ścieżkę obrazu, w którym przechowywany jest obraz. Chcę plik do wysłania go na serwer.

+0

I nie jest niejasne ... to jest po prostu proste. Po prostu pyta, jak mógł dodać te dane do obiektu JSON. –

+0

Czy używasz Javy? Jak mam to zrobić w prostym tekście json? – AllTradesJack

Odpowiedz

6

Dodajecie tylko obiekt File do obiektu JSON. Obiekt File zawiera tylko meta informacje o pliku: Path, name i tak dalej.

Należy załadować obraz i odczytać z niego bajty. Następnie umieść te bajty w obiekcie JSON.

+2

Dzięki za odpowiedź. czy możesz dać mi prosty przykład tego, żebym mógł to odnieść. –

+1

Czy kiedykolwiek dostałeś przykład lub możesz pisać swoje, mam do czynienia z tym problemem. – Lion789

1
public class UploadToServer extends Activity { 

TextView messageText; 
Button uploadButton; 
int serverResponseCode = 0; 
ProgressDialog dialog = null; 

String upLoadServerUri = null; 

/********** File Path *************/ 
final String uploadFilePath = "/mnt/sdcard/"; 
final String uploadFileName = "Quotes.jpg"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_upload_to_server); 

    uploadButton = (Button) findViewById(R.id.uploadButton); 
    messageText = (TextView) findViewById(R.id.messageText); 

    messageText.setText("Uploading file path :- '/mnt/sdcard/" 
      + uploadFileName + "'"); 

    /************* Php script path ****************/ 
    upLoadServerUri = "http://192.1.1.11/hhhh/UploadToServer.php"; 

    uploadButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      dialog = ProgressDialog.show(UploadToServer.this, "", 
        "Uploading file...", true); 

      new Thread(new Runnable() { 
       public void run() { 
        runOnUiThread(new Runnable() { 
         public void run() { 
          messageText.setText("uploading started....."); 
         } 
        }); 

        uploadFile(uploadFilePath + "" + uploadFileName); 

       } 
      }).start(); 
     } 
    }); 
} 

public int uploadFile(String sourceFileUri) { 

    String fileName = sourceFileUri; 

    HttpURLConnection connection = 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("uploadFile", "Source File not exist :" + uploadFilePath + "" 
       + uploadFileName); 

     runOnUiThread(new Runnable() { 
      public void run() { 
       messageText.setText("Source File not exist :" 
         + uploadFilePath + "" + uploadFileName); 
      } 
     }); 

     return 0; 

    } else { 
     try { 

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

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

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

      dos.writeBytes(twoHyphens + boundary + lineEnd); 
      // dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" 
      // + fileName + "\"" + lineEnd); 
      dos.writeBytes("Content-Disposition: post-data; name=uploadedfile;filename=" 
        + URLEncoder.encode(fileName, "UTF-8") + 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) 
      int serverResponseCode = connection.getResponseCode(); 
      String serverResponseMessage = connection.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" 
           + " http://www.androidexample.com/media/uploads/" 
           + uploadFileName; 

         messageText.setText(msg); 
         Toast.makeText(UploadToServer.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() { 
        messageText 
          .setText("MalformedURLException Exception : check script url."); 
        Toast.makeText(UploadToServer.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() { 
        messageText.setText("Got Exception : see logcat "); 
        Toast.makeText(UploadToServer.this, 
          "Got Exception : see logcat ", 
          Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      Log.e("Upload file to server Exception", 
        "Exception : " + e.getMessage(), e); 
     } 
     dialog.dismiss(); 
     return serverResponseCode; 

    } // End else block 
} 

PHP PLIK

<?php 
$target_path = "./Upload/"; 
$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
echo "The file ". basename($_FILES['uploadedfile']['name']). 
" has been uploaded"; 
} else{ 
echo "There was an error uploading the file, please try again!"; 
} 
?> 
Powiązane problemy