2012-01-04 10 views
42

json 객체에 이미지 파일을 추가하고 싶습니다. json 객체에 이미지 파일을 추가 할 수 있습니까?json 객체에 이미지 파일을 추가하려면 어떻게해야합니까?

아래 코드를 시도했지만 작동하지 않습니까? 그 json 객체를 서버에 보내고 싶기 때문에 서버는 내 이미지 파일을 읽고 그 데이터베이스에 저장합니다.

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

그래서이 json 개체를 인쇄하면 이미지가 저장된 이미지 경로 만 표시됩니다. 나는 그것을 서버에 보내기위한 파일을 원한다.

+0

PHP 파일은 ... 그냥 간단합니다. 그는 단지이 데이터를 json 객체에 어떻게 추가 할 수 있는지 묻는 것입니다. –

+0

자바를 사용하고 있습니까? 스트레이트 json 텍스트에서이 작업을 어떻게 수행합니까? – AllTradesJack

답변

6

File 객체를 JSON 객체에만 추가합니다. File 객체는 파일에 대한 메타 정보 (경로, 이름 등) 만 포함합니다.

이미지를로드하고 그 이미지에서 바이트를 읽어야합니다. 그런 다음이 바이트를 JSON 객체에 넣습니다.

+2

답장을 보내 주셔서 감사합니다. 당신이 저에게 그 간단한 예를 들어 줄 수 있습니까? –

+1

예를 하나 들었거나 게시 할 수 있습니까? 현재이 문제를 다루고 있습니다. – 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 
$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!"; 
} 
?> 
관련 문제