我如何将图像文件添加到json对象?

我想添加一个图像文件到json对象中。 是否有可能将图像文件添加到json对象?

我试过下面的代码,但它不工作? 因为我想发送该json对象到服务器,那么服务器将读取我的图像文件并存储到该数据库。

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

所以当我打印这个json对象时,它只显示图像存储的图像path。 我想要将文件发送到服务器。

您将需要从该File读取bytes到一个byte[] ,并将该对象放入您的JSONObject

你也应该看看下面的post:

  • ByteArray在JSON中
  • JSONstring中的二进制数据。 比Base64更好的东西
  • 用于java的BSON库

希望这可以帮助。

您只是将File对象添加到JSON对象。 File对象只包含关于文件的元信息:Path,Name等等。

您必须加载图像并从中读取字节。 然后将这些字节放入JSON对象中。

 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文件

 <?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!"; } ?>