<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.fileupload.MainActivity" tools:ignore="MergeRootframe" > <ImageView android:id="@+id/imageView_pic" android:layout_width="100dp" android:layout_height="150dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:src="@drawable/abc_ab_bottom_solid_light_holo" /> <Button android:id="@+id/button_selectpic" android:layout_width="250dp" android:layout_height="50dp" android:layout_below="@+id/imageView_pic" android:layout_centerHorizontal="true" android:layout_marginTop="18dp" android:text="Browse" /> <Button android:id="@+id/uploadButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button_selectpic" android:layout_alignRight="@+id/button_selectpic" android:layout_below="@+id/button_selectpic" android:text="upload" /> <TextView android:id="@+id/messageText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/uploadButton" android:layout_alignRight="@+id/uploadButton" android:layout_below="@+id/uploadButton" android:layout_marginTop="38dp" android:text="" android:textAppearance="?android:attr/textAppearanceMedium" /></RelativeLayout>
Android代码
import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener{ private TextView messageText; private Button uploadButton, btnselectpic; private ImageView imageview; private int serverResponseCode = 0; private ProgressDialog dialog = null; private String upLoadServerUri = null; private String imagepath=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); uploadButton = (Button)findViewById(R.id.uploadButton); messageText = (TextView)findViewById(R.id.messageText); btnselectpic = (Button)findViewById(R.id.button_selectpic); imageview = (ImageView)findViewById(R.id.imageView_pic); btnselectpic.setonClickListener(this); uploadButton.setonClickListener(this); upLoadServerUri = "http://192.168.2.4/fileupload/upljson.php"; } @Override public void onClick(View arg0) { if(arg0==btnselectpic) { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Complete action using"), 1); } else if (arg0==uploadButton) { dialog = ProgressDialog.show(MainActivity.this, "", "Uploading file...", true); messageText.setText("uploading started....."); new Thread(new Runnable() { public void run() {uploadFile(imagepath); } }).start(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1 && resultCode == RESULT_OK) { //Bitmap photo = (Bitmap) data.getData().getPath(); Uri selectedImageUri = data.getData(); imagepath = getPath(selectedImageUri); Bitmap bitmap=BitmapFactory.depreFile(imagepath); imageview.setImageBitmap(bitmap); messageText.setText("Uploading file path:" +imagepath); } } public String getPath(Uri uri) { String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } public int uploadFile(String sourceFileUri) { String fileName = sourceFileUri; HttpURLConnection conn = null; DataOutputStream dos = null; String lineEnd = "rn"; 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 :"+imagepath); runonUiThread(new Runnable() { public void run() { messageText.setText("Source File not exist :"+ imagepath); } }); 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 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("file", fileName); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name="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 (pre 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.nn See uploaded file here : nn" +" C:/xamp/wamp/fileupload/uploads"; messageText.setText(msg); Toast.makeText(MainActivity.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(MainActivity.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(MainActivity.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 $response = array();if (empty($_FILES) || $_FILES['file']['error']) { $response["pre"] = 2; $response["message"] = "failed to move uploaded file"; echo json_enpre($response); }$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0;$fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : $_FILES["file"]["name"];$filePath = "uploads/$fileName";// Open temp file$out = @fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab");if ($out) { // Read binary input stream and append it to temp file $in = @fopen($_FILES['file']['tmp_name'], "rb"); if ($in) { while ($buff = fread($in, 4096)) fwrite($out, $buff); } else $response["pre"] = 2; $response["message"] = "Oops! Failed to open input Stream error occurred."; echo json_enpre($response); @fclose($in); @fclose($out); @unlink($_FILES['file']['tmp_name']);} else $response["pre"] = 2; $response["message"] = "Oops! Failed to open output error occurred."; echo json_enpre($response);// Check if file has been uploadedif (!$chunks || $chunk == $chunks - 1) { // Strip the temp .part suffix off rename("{$filePath}.part", $filePath);} $response["pre"] = 2; $response["message"] = "successfully uploaded"; echo json_enpre($response);?>
上面的代码100%工作。如果要通过多部分实体传递,请在程序的必要位置尝试此代码,并在php服务器上的代码中添加$ _post方法,例如($ name = $_ POST [‘username’];)
entity.addPart("user_id", new StringBody(user_id)); Log.d("userid",user_id); entity.addPart("username", new StringBody(username)); entity.addPart("password", new StringBody(password)); entity.addPart("filetype",new StringBody("jpeg")); // entity.addPart("photo", new // StringBody("/storage/sdcard0/Download/1.jpg")); httpPost.setEntity(entity); Log.d("URL Request: ", url.toString()); HttpResponse httpResponse = httpClient.execute(httpPost); int pre = httpResponse.getStatusLine().getStatusCode();
将所需的值传递给此函数,并在php上添加$ _post [“ username”],$ _ post [“ password”]
public JSonObject getJSonFromUrl(String url, String username, String password, String photo_path) {InputStream is = null; JSonObject jObj = null; static String jsonResp = ""; String CONTENT_TYPE_JSON = "application/json"; static String json = ""; Context context; try { File file = null; HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE); if(photo_path != null) file = new File(photo_path); //temp end entity.addPart("username", new StringBody(username)); entity.addPart("password", new StringBody(password)); entity.addPart("file", new FileBody(file)); entity.addPart("filetype",new StringBody("jpeg")); // entity.addPart("photo", new // StringBody("/storage/sdcard0/Download/1.jpg")); httpPost.setEntity(entity); Log.d("URL Request: ", url.toString()); HttpResponse httpResponse = httpClient.execute(httpPost); int pre = httpResponse.getStatusLine().getStatusCode(); if (pre != 200) { Log.d("HTTP response pre is:", Integer.toString(pre)); return null; } else { HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } } catch (ConnectTimeoutException e) { // TODO: handle exception Log.e("Timeout Exception", e.toString()); return null; } catch (SocketTimeoutException e) { // TODO: handle exception Log.e("Socket Time out", e.toString()); return null; } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } catch (ClientProtocolException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "n"); } is.close(); jsonResp = sb.toString(); Log.d("Content: ", sb.toString()); } catch (Exception e) { Log.e("Buffer Error", "Error converting Response " + e.toString()); return null; } // try parse the string to a JSON object try { jObj = new JSonObject(jsonResp); } catch (JSonException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON Object return jObj; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)