将图像文本文件从Android发送到Web服务器(localhost)

将图像文本文件从Android发送到Web服务器(localhost),第1张

将图像/文本文件从Android发送到Web服务器(localhost)

尝试将此代码100%工作。通过多部分数据传递完成图像上传

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5430454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存