• 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>
  • 相关阅读:
    新概念第二册(1)--英语口语听力课1
    外企面试课程(一)---熟悉常见的缩略词
    公司 邮件 翻译 培训 长难句 结课
    workflow
    公司 邮件 翻译 培训 长难句 20
    公司 邮件 翻译 培训 长难句 19
    Engineering Management
    公司 邮件 翻译 培训 长难句 18
    公司 邮件 翻译 培训 长难句 17
    第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头
  • 原文地址:https://www.cnblogs.com/top5/p/2487301.html
Copyright © 2020-2023  润新知