zoukankan      html  css  js  c++  java
  • Android拍照上传代码样例

    1、LoginWindow.java --登录窗口
    package com.hemi.rhet;
    import com.hemi.rhet.R;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    public class LoginWindow extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            System.out.println("enter LoginWindow.onCreate()!");
            
            super.onCreate(savedInstanceState);
            
            setContentView(R.layout.login_window);
            
            mUserName = (EditText)findViewById(R.id.username);
            mUserPasswd = (EditText)findViewById(R.id.userpasswd);
            
            cbx_cmwap = (CheckBox) findViewById(R.id.cbx_cmwap);
            loginButton = (Button) findViewById(R.id.login_button);
            exitButton = (Button) findViewById(R.id.exit_button);
            
            loginBtnListener = new View.OnClickListener() {
                public void onClick(View view) {
                    LoginWindow.isCmwap = cbx_cmwap.isChecked();
                    
                    if (view == loginButton) {
                            launchFetion();
                    } else if(view == exitButton) {
                        finish();
                    }
                }
            };
            loginButton.setOnClickListener(loginBtnListener);
            exitButton.setOnClickListener(loginBtnListener);
        }
        
        private void launchFetion() {
            Intent i = new Intent(this, FuncSelector.class);
            i.putExtra(KEY_LOGIN_NAME, mUserName.getText().toString());
            i.putExtra(KEY_LOGIN_PASSWD, mUserPasswd.getText().toString());
            i.putExtra(KEY_LOGIN_TYPE, cbx_cmwap.isChecked());
            
            startActivity(i);
        }
        
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent msg) {
    //        System.out.println("enter onKeyDown() in LoginWindow!");
    //        
    //        if (null != loginBtnListener) {
    //            View aview = getCurrentFocus();
    //            loginBtnListener.onClick(aview);
    //        }
            return false;
        }
        
        private Button loginButton, exitButton;
        private EditText mUserName;
        private EditText mUserPasswd;
        private CheckBox cbx_cmwap;
        
        private OnClickListener loginBtnListener;
        
        public static final String KEY_LOGIN_NAME = "login_name";
        public static final String KEY_LOGIN_PASSWD = "login_passwd";
        public static final String KEY_LOGIN_TYPE = "login_type";
        public static boolean isCmwap = false;
    }
    2. FuncSelector.java -- 功能模块选择窗口
    package com.hemi.rhet;
    import java.util.ArrayList;
    import java.util.HashMap;
    import com.hemi.rhet.R;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.GridView;
    import android.widget.SimpleAdapter;
    import android.widget.AdapterView.OnItemClickListener;
    public class FuncSelector extends Activity {
            @Override
            public void onCreate(Bundle savedInstanceState) {
                    Log.i("info", "enter LoginWindow.onCreate()!");
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.func_selector);
                    initFuncGrids();
            }
            private void initFuncGrids() {
                    GridView funcSeleView = (GridView) findViewById(R.id.func_selector);
                    // 生成动态数组,并且转入数据
                    ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();
                    HashMap<String, Object> map = new HashMap<String, Object>();
                    map.put("ItemImage", R.drawable.photo_upload);                        // 添加图像资源的ID
                    map.put("ItemText", getString(R.string.photo_upload));        // 按序号做ItemText
                    lstImageItem.add(map);
                    
                    map = new HashMap<String, Object>();
                    map.put("ItemImage", R.drawable.icon);
                    map.put("ItemText", getString(R.string.sys_config));
                    lstImageItem.add(map);
                    
                    for (int i = 1; i <= 10; i++) {
                            map = new HashMap<String, Object>();
                            map.put("ItemImage", R.drawable.icon);                        // 添加图像资源的ID
                            map.put("ItemText", "NO." + String.valueOf(i));        // 按序号做ItemText
                            lstImageItem.add(map);
                    }
                            
                    // 生成适配器的ImageItem <====> 动态数组的元素,两者一一对应
                    SimpleAdapter saImageItems = new SimpleAdapter(this, // 没什么解释
                                    lstImageItem,// 数据来源
                                    R.layout.night_item,// night_item的XML实现
                                    // 动态数组与ImageItem对应的子项
                                    new String[] { "ItemImage", "ItemText" },
                                    // ImageItem的XML文件里面的一个ImageView,两个TextView ID
                                    new int[] {R.id.ItemImage,R.id.ItemText});
                                    //null);
                    
                    // 添加并且显示
                    funcSeleView.setAdapter(saImageItems);
                    //saImageItems.notifyDataSetChanged();
                    
                    // 添加消息处理
                    funcSeleView.setOnItemClickListener(new ItemClickListener());
            }
            
            public boolean onCreateOptionsMenu(Menu menu) {
                    super.onCreateOptionsMenu(menu);
            menu.add(0, EXIT_ID,0, R.string.back_button);
            
            return true;
            }
            
            //@Override
        public boolean onMenuItemSelected(int featureId, MenuItem item) {
                boolean result = true;
                
            switch(item.getItemId()) {
            case EXIT_ID:
                    this.finish();
                    break;
                    
                    default:
                            result = super.onMenuItemSelected(featureId, item);
                            break;
                    }
            
            return result; 
        }
            // 当AdapterView被单击(触摸屏或者键盘),则返回的Item单击事件
            class ItemClickListener implements OnItemClickListener {
                    public void onItemClick(AdapterView<?> arg0,// The AdapterView where the
                                    // click happened
                                    View arg1,// The view within the AdapterView that was clicked
                                    int arg2,// The position of the view in the adapter
                                    long arg3// The row id of the item that was clicked
                    ) {
                            // 在本例中arg2=arg3
                            HashMap<String, Object> item = (HashMap<String, Object>) arg0
                                            .getItemAtPosition(arg2);
                            String tmpStr = (String) item.get("ItemText");
                            //item.put("ItemText", tmpStr + tmpStr.substring(tmpStr.length() - 1));
                            // 显示所选Item的ItemText
                            // setTitle((String)item.get("ItemText"));
                            Log.i("info", (String) item.get("ItemText"));
                            ((SimpleAdapter) arg0.getAdapter()).notifyDataSetChanged();
                            
                            Intent i;
                            switch (arg2) {
                            case 0:
                                    i = new Intent();
                                    i.setClass(FuncSelector.this, PhotoUpload.class);
                                    startActivity(i);
                                    break;
                                    
                            case 1:
                                    i = new Intent();
                                    i.setClass(FuncSelector.this, ConfigWindow.class);
                                    startActivity(i);
                                    break;
                                    
                            default:
                                    break;
                            }
                    }
            }
            private static final int TAKE_PHOTO_ID = Menu.FIRST;
        private static final int UPLOAD_PHOTO_ID = Menu.FIRST + 1;
        private static final int EXIT_ID = Menu.FIRST + 3;
        
    }//FuncSelector
    3. PhotoUpload.java -- 照片上传模块
    package com.hemi.rhet;
    import java.io.BufferedReader;
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import org.apache.http.Header;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.FileEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import com.hemi.rhet.R;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.GridView;
    import android.widget.ImageView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemClickListener;
    public class PhotoUpload extends Activity {
            @Override
            public void onCreate(Bundle savedInstanceState) {
                    Log.i("info", "enter LoginWindow.onCreate()!");
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.func_selector);
            }
            @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                    super.onActivityResult(requestCode, resultCode, data);
                    
                    if (TAKE_PHOTO_ID == requestCode) {
                            if (resultCode != RESULT_OK) return;
                            Bundle extras = data.getExtras();
                            try {
                                    Bitmap photoCaptured = (Bitmap) extras.get("data");
                                    ImageView img = new ImageView(this);
                                    img.setImageBitmap(photoCaptured);
                                    setContentView(img);
                                    //store to sd card
                                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                                    photoCaptured.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                                    byte[] photoBytes = baos.toByteArray();
                                    File aFile = new File(getDatedFName(SD_CARD_TEMP_DIR));
                                    photoPath = aFile.getAbsolutePath();
                                    
                                    boolean b;
                                    if (aFile.exists()) b = aFile.delete();
                                    //f.mkdirs();
                                    aFile.createNewFile();  //need add permission to manifest
                                    
                                    FileOutputStream fos = new FileOutputStream(aFile);
                                    fos.write(photoBytes);
                                    fos.close();
                                    Log.d("info", "onPictureTaken - wrote bytes: "
                                                    + photoBytes.length);
                                    Uri capturedImage = Uri
                                                    .parse(android.provider.MediaStore.Images.Media
                                                                    .insertImage(getContentResolver(), aFile
                                                                                    .getAbsolutePath(), null, null));
                                    Log.i("camera", "Selected image: " + capturedImage.toString());
                            } catch (FileNotFoundException e) {
                                    e.printStackTrace();
                            } catch (IOException e) {
                                    e.printStackTrace();
                            }             
                    } else if (UPLOAD_PHOTO_ID == requestCode) {
                            
                    }
            } 
            
        public boolean onCreateOptionsMenu(Menu menu) {
            super.onCreateOptionsMenu(menu);
            menu.add(0, TAKE_PHOTO_ID,0, R.string.take_photo);
            menu.add(0, UPLOAD_PHOTO_ID,0, R.string.upload_photo);
            menu.add(0, BACK_ID,0, R.string.back_button);
            
            return true;
        }
            
        //@Override
        public boolean onMenuItemSelected(int featureId, MenuItem item) {
                boolean result = true;
                
            switch(item.getItemId()) {
            case TAKE_PHOTO_ID:
                            Log.i("info", "ready to take photos!");
                            Intent i = new Intent("android.media.action.IMAGE_CAPTURE");
                            startActivityForResult(i, TAKE_PHOTO_ID);
                            result = true;
                            break;
            case UPLOAD_PHOTO_ID:
                    uploadFile2Svr();
                    break;
                            
            case BACK_ID:
                    this.finish();
                    break;
                    
                    default:
                            result = super.onMenuItemSelected(featureId, item);
                            break;
                    }
            
            return result; 
        }
        
        public void uploadFile2Svr() {
                HttpClient httpclient = new DefaultHttpClient();
                String urlStr = new StringBuffer().append(HTTP_PROTOCOL)
                        .append(/*SERVER_IP*/ConfigWindow.getServerIp())
                        .append(':')
                        .append(/*SERVER_PORT*/ConfigWindow.getServerPort())
                        .append(FILE_UPLOADER_URL)
                        .toString();
                    HttpPost httppost = new HttpPost(urlStr);
                
                    String uploadMsg = "上传 照片失败!";
                try {
                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                        // Your DATA
                        nameValuePairs.add(new BasicNameValuePair("filename", ("IMAGE.jpg")) );
    //                nameValuePairs.add(new BasicNameValuePair("orderno", "1"));
    //                nameValuePairs.add(new BasicNameValuePair("userid", "123"));
    //                nameValuePairs.add(new BasicNameValuePair("attach_type", "1"));
    //            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                        
                        File aFile = new File(photoPath);
                        Log.i("info -- photoPath: ", photoPath);
                        FileEntity fileEty = new FileEntity(aFile, "binary/octet-stream");
                        httppost.setEntity(fileEty);
                        httppost.addHeader("filename", /*("IMAGE.jpg")*/aFile.getName());
                        
                            HttpResponse response;
                            response = httpclient.execute(httppost);
                            //Log.i("info -- response: ", response.getStatusLine().getReasonPhrase());
                            
                            Header[] headers = response.getAllHeaders();
                            headers = response.getHeaders("resultcode");
                            if (headers[0].getValue().equals("0")) {
                                    uploadMsg = "上传照片成功!";
                            }
                            
                    } catch (UnsupportedEncodingException e) {
                            //e.printStackTrace();
                            uploadMsg += e.toString();
                            Log.e("exception", e.toString());
                    } catch (ClientProtocolException e) {
                            //e.printStackTrace();
                            uploadMsg += e.toString();
                            Log.e("exception", e.toString());
                    } catch (IOException e) {
                            //e.printStackTrace();
                            uploadMsg += e.toString();
                            Log.e("exception", e.toString());
                    } finally {
                            Toast.makeText(PhotoUpload.this, uploadMsg,
                        Toast.LENGTH_LONG).show();
                            httpclient.getConnectionManager().shutdown();
                    }
        }
        
        public void uploadFile2Svr2() {
                BufferedReader in = null;   
                HttpClient httpclient = new DefaultHttpClient();
                String urlStr = new StringBuffer().append(HTTP_PROTOCOL)
                  .append(ConfigWindow.getServerIp())
                  .append(ConfigWindow.getServerPort())
                        .append(FILE_UPLOADER_URL)
                        .toString();
                
                URL url = null;
                    try {
                            url = new URL(urlStr);
                    } catch (MalformedURLException e1) {
                            e1.printStackTrace();
                    }
                    
                    HttpURLConnection conn = null;
                    DataOutputStream dos = null;
                    
                    String lineEnd = "/r/n";
                    String twoHyphens = "--";
                    String boundary = "*****"; 
                    int maxBufferSize = 16 * 1024;
                    try {
    //                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    //                        // Your DATA
    //                        nameValuePairs.add(new BasicNameValuePair("filename", getDatedFName("IMAGE.jpg")) );
    //                        nameValuePairs.add(new BasicNameValuePair("orderno", "1"));
    //                        nameValuePairs.add(new BasicNameValuePair("userid", "123"));
    //                        nameValuePairs.add(new BasicNameValuePair("attach_type", "1"));
                            //httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                            // Open a HTTP connection to the URL
                            conn = (HttpURLConnection) url.openConnection();
                            
                            conn.setConnectTimeout(120000);
                            // Allow Inputs
                            conn.setDoInput(true);
                            // Allow Outputs
                            conn.setDoOutput(true);
                            // Don't use a cached copy.
                            conn.setUseCaches(false);
                            // Use a post method.
                            conn.setRequestMethod("POST");
                            conn.setRequestProperty("Connection", "Keep-Alive");
                            conn.setRequestProperty("Content-Type",
                                            //"multipart/form-data;boundary=" + boundary);
                                    "application/x-www-form-urlencoded"); 
                            
                             conn.setRequestProperty("user-agent",
                         "Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB6");
                             //conn.setRequestProperty("accept-language", "zh-cn,zh;q=0.5");
                             //conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+ boundary);
                            
                             conn.connect();
                             //OutputStream connOs = conn.getOutputStream();
                             dos = new DataOutputStream(conn.getOutputStream());
                            dos.writeBytes(twoHyphens + boundary + lineEnd);
                            dos.writeBytes("Content-Disposition: form-data; name=/"uploadedfile/";filename=/""
                                                            + "exsistingFileName" + "/"" + lineEnd);
                            //dos.writeBytes(lineEnd);
                            Log.i("info", "Headers are written");
                            // upload file to webserver via http
                            FileInputStream fileInputStream = new FileInputStream(photoPath);
                            // create a buffer of maximum size
                            int bytesAvailable = fileInputStream.available();
                            int bufferSize = Math.min(bytesAvailable, maxBufferSize);
                            byte[] buffer = new byte[bufferSize];
                            // read file and write it into form...
                            int 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);
                            // close streams
                            Log.e("info", "File is written");
                            fileInputStream.close();
                            dos.flush();
                            dos.close();
                            dos = null;
                            // response
                            // HttpResponse response;
                            // response = httpclient.execute(httppost);
                            // response = httpclient.execute(conn.get);
                            in = new BufferedReader(
                                            new InputStreamReader(conn.getInputStream()));
                            StringBuffer sb = new StringBuffer("");
                            String line = "";
                            String NL = System.getProperty("line.separator");
                            while ((line = in.readLine()) != null) {
                                    sb.append(line + NL);
                            }
                            in.close();
                            String result = sb.toString();
                            Log.i("info", result);   
                    } catch (ClientProtocolException e) {
                            e.printStackTrace();
                    } catch (IOException e) {
                            e.printStackTrace();
                    } finally{   
                if(in != null){   
                    try{   
                        in.close();   
                    }catch(IOException ioe){   
                        Log.e("error", ioe.toString());   
                    }   
                }  
                    }
        }
        
        public static String getDatedFName(String fname) {
                    StringBuffer result = new StringBuffer();
                    SimpleDateFormat df = new SimpleDateFormat("yyMMddHHmmss");
                    String dateSfx = "_" + df.format(new Date());
                    int idx = fname.lastIndexOf('.');
                    if (idx != -1) {
                            result.append(fname.substring(0, idx));
                            result.append(dateSfx);
                            result.append(fname.substring(idx));
                    } else {
                            result.append(fname);
                            result.append(dateSfx);
                    }
                    return result.toString();
            }
        
            //=============================================
        //private Bitmap photoCaptured;
        private String photoPath = "/sdcard/IMAGE_100225083437.jpg";  //"/sdcard/1.txt";
        
              private static final int TAKE_PHOTO_ID = Menu.FIRST;
        private static final int UPLOAD_PHOTO_ID = Menu.FIRST + 1;
        private static final int BACK_ID = Menu.FIRST + 3;
        
        private static final String HTTP_PROTOCOL = "http://";
        private static final String FILE_UPLOADER_URL = "/fileuploader/system/fileUpload";
        
        private String SD_CARD_TEMP_DIR = Environment.getExternalStorageDirectory() + File.separator + "IMG.jpg"; 
    }
    4. ConfigWindow.java--系统配置窗口
    package com.hemi.rhet;
    import com.hemi.rhet.R;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    public class ConfigWindow extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            System.out.println("enter ConfigWindow.onCreate()!");
            
            super.onCreate(savedInstanceState);
            
            setContentView(R.layout.config_window);
            
            mServerIP = (EditText)findViewById(R.id.serverip);
            mServerPort = (EditText)findViewById(R.id.serverport);
            //hemerr
            mServerIP.setText(serverIp);
            mServerPort.setText(serverPort);
            
            okButton = (Button) findViewById(R.id.ok_button);
            backButton = (Button) findViewById(R.id.back_button);
            
            loginBtnListener = new View.OnClickListener() {
                public void onClick(View view) {
                    if (view == okButton) {
                            serverIp = mServerIP.getText().toString();
                            serverPort = mServerPort.getText().toString();
                            Log.i("info", "IP is: "+serverIp+"/tPort is: "+serverPort);
                            
                            finish();
                            
                    } else if(view == backButton) {
                            finish();
                    }
                }
            };
            okButton.setOnClickListener(loginBtnListener);
            backButton.setOnClickListener(loginBtnListener);
        }
        
        private void launchFetion() {
            Intent i = new Intent(this, FuncSelector.class);
            i.putExtra(KEY_LOGIN_NAME, mServerIP.getText().toString());
            i.putExtra(KEY_LOGIN_PASSWD, mServerPort.getText().toString());
            
            startActivity(i);
        }
        
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent msg) {
    //        System.out.println("enter onKeyDown() in LoginWindow!");
    //        
    //        if (null != loginBtnListener) {
    //            View aview = getCurrentFocus();
    //            loginBtnListener.onClick(aview);
    //        }
            return false;
        }
        
        public static String getServerIp() {
                    return serverIp;
            }
            public static String getServerPort() {
                    return serverPort;
            }
        
        private Button okButton, backButton;
        private EditText mServerIP;
        private EditText mServerPort;
        
        private OnClickListener loginBtnListener;
        
        public static final String KEY_LOGIN_NAME = "login_name";
        public static final String KEY_LOGIN_PASSWD = "login_passwd";
        public static final String KEY_LOGIN_TYPE = "login_type";
        public static String serverIp = "192.168.0.98";  //;
        public static String serverPort = "8081";
    }
    还需要增加bg_logo.jpg、icon.png、photo_upload.png等几个图片。
    Android拍照上传程序的xml配置文件
    1. login_window.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical" android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:background="@drawable/bg_logo" 
            >
            <TextView android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip" 
                    android:text="@string/user_name"
                    />
            <EditText 
                    android:id="@+id/username"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:scrollHorizontally="true"
            android:autoText="false"
            android:text="user"
            android:capitalize="none"
            android:gravity="fill_horizontal"
            android:textAppearance="?android:attr/textAppearanceMedium" 
            />
            <TextView android:layout_width="wrap_content"
                    android:layout_height="wrap_content" 
                    android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip" 
                    android:text="@string/user_passwd" />
                    
            <EditText android:id="@+id/userpasswd" 
            android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:scrollHorizontally="true"
            android:autoText="false"
            android:text="user"
            android:capitalize="none"
            android:gravity="fill_horizontal"
            android:password="true"
            android:textAppearance="?android:attr/textAppearanceMedium" />
            <CheckBox android:id="@+id/cbx_cmwap" 
                      android:text="CMWAP"
                      android:checked="false"
                      android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip" 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />                
                                    
            <RelativeLayout android:orientation="horizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
                    
            <Button android:id="@+id/login_button" 
                      android:text="LOGIN"
                      android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip" 
            android:layout_alignParentRight="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
            
            <Button android:id="@+id/exit_button" 
                      android:text="EXIT"
                      android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip" 
            android:layout_toLeftOf="@id/login_button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
                    
            </RelativeLayout>
                    
    </LinearLayout>
    2. func_selector.xml
    <?xml version="1.0" encoding="utf-8"?>
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"    
        android:id="@+id/func_selector"  
        android:layout_width="fill_parent"    
        android:layout_height="fill_parent"  
        android:numColumns="auto_fit"  
        android:verticalSpacing="10dp"  
        android:horizontalSpacing="10dp"  
        android:columnWidth="90dp"  
        android:stretchMode="columnWidth"  
        android:gravity="center"  
        android:background="@drawable/bg_logo"
    />  
    3. night_item.xml
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 
             xmlns:android="http://schemas.android.com/apk/res/android" 
             android:layout_height="wrap_content" 
             android:paddingBottom="4dip" android:layout_width="fill_parent">
             <ImageView 
                   android:layout_height="wrap_content" 
                   android:id="@+id/ItemImage" 
                   android:layout_width="wrap_content" 
                   android:layout_centerHorizontal="true"> 
             </ImageView>
             <TextView 
                   android:layout_width="wrap_content" 
                   android:layout_below="@+id/ItemImage" 
                   android:layout_height="wrap_content" 
                   android:text="TextView01" 
                   android:layout_centerHorizontal="true" 
                   android:id="@+id/ItemText">
             </TextView>
    </RelativeLayout>
    4. config_window.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical" android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            >
            <TextView android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip" 
                    android:text="@string/server_ip"
                    />
            <EditText 
                    android:id="@+id/serverip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:scrollHorizontally="true"
            android:autoText="false"
            android:capitalize="none"
            android:gravity="fill_horizontal"
            android:textAppearance="?android:attr/textAppearanceMedium" 
            />
            <TextView android:layout_width="wrap_content"
                    android:layout_height="wrap_content" 
                    android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip" 
                    android:text="@string/server_port" />
                    
            <EditText android:id="@+id/serverport" 
            android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:scrollHorizontally="true"
            android:autoText="false"
            android:capitalize="none"
            android:gravity="fill_horizontal"
            android:textAppearance="?android:attr/textAppearanceMedium" />
            <RelativeLayout android:orientation="horizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
                    
            <Button android:id="@+id/ok_button" 
                      android:text="@string/ok_button"
                      android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip" 
            android:layout_alignParentRight="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
            
            <Button android:id="@+id/back_button" 
                      android:text="@string/back_button"
                      android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip" 
            android:layout_toLeftOf="@id/ok_button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
                    
            </RelativeLayout>
                    
    </LinearLayout>
    5. AndroidManifest.xml
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.hemi.rhet" android:versionCode="1" android:versionName="1.0">
            <application android:icon="@drawable/icon" android:label="@string/app_name">
                    <activity android:label="@string/app_name" android:name="LoginWindow">
                            <intent-filter>
                                    <action android:name="android.intent.action.MAIN" />
                                    <category android:name="android.intent.category.LAUNCHER" />
                            </intent-filter>
                    </activity>
                    <activity android:name="FuncSelector"></activity>
                    <activity android:name="PhotoUpload"></activity>
                    <activity android:name="ConfigWindow"></activity>
            </application>
            <uses-sdk android:minSdkVersion="5"/>
            
            <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>  
    </manifest> 
    Android拍照上传程序的Servlet程序样例
    UploadFileServlet.java
    package com.hemi.rhet.servlet;
    import java.io.*;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.sql.SQLException;
    import java.text.SimpleDateFormat;
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    //import org.apache.commons.fileupload.*;
    //import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    //import org.apache.commons.fileupload.servlet.ServletFileUpload;
    //import org.apache.commons.lang.time.DateUtils;
    import org.apache.log4j.Logger;
    //import org.apache.struts2.ServletActionContext;
    public class UploadFileServlet extends HttpServlet
    {
        private static Logger log = Logger.getLogger(UploadFileServlet.class);
        private static final String OBLIQUE_LINE = "/";
        private static final String OPPOSITE_OBLIQUE_LINE = "////";
        private static final String WEBPOSITION = "webapps";
        
        private static final String SBPATH = "UploadedFiles/";
        File outdir = null;
        File outfile = null;
        FileOutputStream fos = null;
        BufferedInputStream bis = null;
        byte[] bs = new byte[1024];
        String uploadFName = null;
        String orderNo = null;
        String userId = null;
        String attachType = "2";
        public void init() throws ServletException
        {
    //        if (log.isDebugEnabled())
    //        {
    //            log.debug("进入init()方法!!");
    //        }
        }
        public void doGet(HttpServletRequest request , HttpServletResponse response) throws IOException, ServletException
        {
            doPost(request, response);
        }
        public void doPost(HttpServletRequest request , HttpServletResponse response) throws IOException, ServletException
        {
            String root = this.getServletContext().getRealPath("/"); 
            root = root.replaceAll("////", "/");
            
            try
            {
                StringBuffer destFName = new StringBuffer();
                destFName.append(getRealDir(root)).append(SBPATH);
                outdir = new File(destFName.toString());
                
                request.setCharacterEncoding("UTF-8");
                
                uploadFName = request.getParameter("filename");  //name of uploaded file
                uploadFName = request.getHeader("filename");
                if (isEmpty(uploadFName)) uploadFName = "filename.jpg";
                //orderNo = request.getParameter("orderno");       //id of the order or work sheet 
                //userId  = request.getParameter("userid");        //id of the user who upload the file
                //attachType = request.getParameter("attach_type"); //type of attachment, refer to file.FileBean's definition 
                
                String desc = request.getParameter("desc");      //description of uploaded file
                if (desc==null) desc = "";
                
                if (true)
                {
                        destFName.append(getDatedFName(uploadFName));
                    outfile = new File(destFName.toString());
                    
                    bis = new BufferedInputStream(request.getInputStream());
                    uploadFile(); 
                    
                    //response.getWriter().write("0");  //success
                    response.setHeader("resultcode", "0");
                }
                else if (desc.length() > 400/2) {
                        //response.getWriter().write("3");  //illegal description
                        response.setHeader("resultcode", "3");
                }
                else
                {
                    if (log.isDebugEnabled())
                    {
                        log.debug("调用格式错误!");
                    }
                    response.sendError(100, "参数错误!");
                    //response.getWriter().write("1");
                    response.setHeader("resultcode", "1");  //parameter error
                    
                    //return;
                }
            } catch (SQLException e) {
                    if (log.isDebugEnabled()) {
                    log.debug(e);
                }
                    
                    //response.getWriter().write("6");  //failure of insert to database 
                    response.setHeader("resultcode", "6");
            } catch (Exception e) {
                if (log.isDebugEnabled()) {
                    log.debug(e);
                }
                //response.getWriter().write("7");  //failure
                response.setHeader("resultcode", "7");
                
            } finally {
                if (null != bis)
                    bis.close();
                if (null != fos)
                    fos.close();
            }
        }
        private void uploadFile() throws IOException
        {
            if (log.isDebugEnabled())
            {
                log.debug("outdir:" + outdir.getPath());
                log.debug("outfile:" + outfile.getPath());
            }
            if (!outdir.exists())
                outdir.mkdir();
            if (!outfile.exists())
                outfile.createNewFile();
            fos = new FileOutputStream(outfile);
            int i;
            while ((i = bis.read(bs)) != -1)
            {
                fos.write(bs, 0, i);
            }
        }
        
        public static String getDatedFName(String fname) {
                    StringBuffer result = new StringBuffer();
                    SimpleDateFormat df = new SimpleDateFormat("yyMMddHHmmss");
                    String dateSfx = "_" + df.format(new Date());
                    int idx = fname.lastIndexOf('.');
                    if (idx != -1) {
                            result.append(fname.substring(0, idx));
                            result.append(dateSfx);
                            result.append(fname.substring(idx));
                    } else {
                            result.append(fname);
                            result.append(dateSfx);
                    }
                    return result.toString();
            }
        
            public static String getUrlFName(String fname, HttpServletRequest request) {
                    String result = ""; 
                    if (isEmpty(fname)) return result;
                    
                    try {
                            if (fname.startsWith("http://")) {
                                    result = fname;
                            } else {
                                    //HttpServletRequest request = ServletActionContext.getServletContext().getRgetRequest();
                                    //UserAndOrganAndRole user = (UserAndOrganAndRole)request.getSession().getAttribute("user");
                                    
                                    String ip = request.getServerName();
                                    int port = request.getServerPort();
                                    
                                    result = fname.substring(fname.indexOf(UploadFileServlet.SBPATH));
                                    StringBuffer tmpBuff = new StringBuffer();
                                    tmpBuff.append("http://").append(ip).append(":").append(port).append(OBLIQUE_LINE).append(result);
                                    //Sample: http://localhost:8083/UploadedFiles/IMAGE_067_100222102521.jpg
                                    result = tmpBuff.toString();
                            }
                    } catch (Exception ex) {
                            ex.printStackTrace();
                    }
                    
                    System.out.println("result is: "+result);
                    return result;        
            }
            
            public static boolean isEmpty(String str) {
                    return ((str == null) || (str.length() == 0));
            }
        /**
         * Method getRealDir search webapps position
         * 
         * @param despath
         * 
         * @return
         * 
         */
        private String getRealDir(String newFileNameRoot) throws Exception {
            if (newFileNameRoot == null)
                throw new Exception("get real dir failed !");
            int dp = newFileNameRoot
                    .lastIndexOf(OBLIQUE_LINE);
            if (dp == -1)
                throw new Exception("invalid path !");
            int dpbefore = newFileNameRoot.lastIndexOf(
                    OBLIQUE_LINE, dp - 1);
            if (dpbefore == -1)
                throw new Exception("invalid path !");
            String needSubStr = newFileNameRoot.substring(dpbefore + 1, dp);
            String nextStr = newFileNameRoot.substring(0, dpbefore + 1);
            if (!needSubStr.trim().equals(WEBPOSITION)) {
                return getRealDir(nextStr);
            } else
                return newFileNameRoot;
        }
        
        public static void main(String[] args)
        {
        }
    }
    web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" 
            xmlns="http://java.sun.com/xml/ns/j2ee" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
            http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      
      <servlet>    
            <servlet-name>Upload</servlet-name>    
            <servlet-class>com.hemi.rhet.servlet.UploadFileServlet</servlet-class>    
        </servlet>       
        <servlet-mapping>    
            <servlet-name>Upload</servlet-name>    
            <url-pattern>/system/fileUpload</url-pattern>    
        </servlet-mapping>
    </web-app>
  • 相关阅读:
    Windows下安装redis,并与PHP使用
    php中的一些小细节(1)
    MIME类型
    Oracle与SQL Server事务处理的比较
    php+memcached缓存技术实例
    B-树
    平衡二叉树(AVL)
    树--二叉查找树(二叉排序树)
    八种常见的排序算法
    反转一个值中的最后n位
  • 原文地址:https://www.cnblogs.com/top5/p/2487301.html
Copyright © 2011-2022 走看看