当前位置: 代码迷 >> Java Web开发 >> 怎么实现文件自动上传
  详细解决方案

怎么实现文件自动上传

热度:5297   发布时间:2013-02-25 21:21:24.0
如何实现文件自动上传
之前操作是这样的:
1.项目有一个二代身份证的扫描器,扫描过身份证后,照片会生成在一个指定的目录。
2.用户于去目录下找到这些照片,通过input type=file 上传。
3.用户点确定提交请求。

打算改造成这样的:
1.扫描过身份证后,照片生成在指定的目录;
2.在页面上点确定后就能直接上传到服务器(不需要中间的选择照片步骤)。

这样的目的是为了减少用户选择照片中间操作。。。

请教各位大大,如何实现这样的功能

------解决方案--------------------------------------------------------
Java code
 /** *Description: encapsule http protocol of uploading. *@param url  The server url of handleing upload. *@param sessionId  Session id *@param uploadFile The file that is going to be uploaded *@param param Other form parameters *@return *@throws */public static void doMultipartUpload( String url,  String sessionId,              File uploadFile,  Map<String, String> param,              UploadApplet applet,  List<Map<String, String>> fileList,             int index) {                       long blockSize = 5*MB;                int rate = 0;                long fileSize = uploadFile.length();                               long uploadCount = ((long)(fileSize - 1)/blockSize) + 1;                System.out.println("before loop ..................."+fileSize+"....."+ uploadCount);                param.put("mu", "1");                List<Map<String, String>> fList = fileList;                Map<String, String> fm = (Map)fList.get(index);                for(long i = 0 ; i < uploadCount; i++) {                    param.put("n", "" + i);                    doMultipartUploadOne(url,i,blockSize, sessionId, uploadFile,param);                    rate = (int)((float)i / (float)uploadCount * 100);                    fm.put("RATE", ""+rate);                    updateUploadInfo(applet, fList);                }                fm.put("RATE", "100");                updateUploadInfo(applet, fList);                }        /**     *      */    public static void doMultipartUploadOne(String url,long n, long blockSize, String sessionId, File uploadFile, Map param) {      try {        long skip = n * blockSize;        RandomAccessFile fin = new RandomAccessFile(uploadFile, "r");        fin.seek(skip);        long fileSize = fin.length();        long uploadSize = (skip + blockSize > fileSize) ? fileSize - skip : blockSize;        URL u = new URL(url);        byte[] form_part = getFormData(param);        byte[] end_data = ("\r\n--" + boundary + "--\r\n").getBytes();           long size = form_part.length + uploadSize + end_data.length;        HttpURLConnection con = (HttpURLConnection)u.openConnection();        con.setRequestMethod("POST");        con.setDoInput(true);        con.setDoOutput(true);        con.addRequestProperty("Cookie","JSESSIONID="+sessionId);        con.addRequestProperty("Connection","Keep-Alive");        con.addRequestProperty("Cache-Control", "no-cache");        con.setRequestProperty("Content-Type","multipart/form-data; boundary="+boundary);        con.setRequestProperty("Content-Length",String.valueOf(size));        DataOutputStream out = new DataOutputStream(con.getOutputStream());        out.write(form_part);        StringBuffer headerBuf = new StringBuffer();        headerBuf.append("Content-Disposition: form-data; name=\"file\"; filename=\"")                 .append(uploadFile.getAbsolutePath()).append("\"\r\n");        headerBuf.append("Content-Type: application/octet-stream\r\n\r\n");         out.write(headerBuf.toString().getBytes());        int rn2 = 0;        long loadLen = 0L;        byte[] buf2 = new byte[1024];           while((rn2=fin.read(buf2, 0, 1024))>0)           {               if(loadLen + rn2 >= blockSize){                out.write(buf2,0,(int)(uploadSize - loadLen));                  break;            } else {                out.write(buf2,0,rn2);                 loadLen += rn2;            }                       }         out.write(end_data);        out.flush();        out.close();        fin.close();        InputStream in = con.getInputStream();        StringBuffer respBuffer = new StringBuffer();        BufferedReader reader = new BufferedReader(new InputStreamReader(in));        String line = new String();        while((line = reader.readLine())!= null) {            respBuffer.append(line);        }        fin.close();        con.disconnect();       } catch (FileNotFoundException e) {          e.printStackTrace();      } catch (MalformedURLException e) {        e.printStackTrace();      } catch (IOException e) {        e.printStackTrace();      }    } public static byte[] getFormData(Map<String, String> param)  throws IOException {        StringBuffer buf = new StringBuffer();        buf.append("--").append(boundary).append("\r\n");        for(Iterator itr = param.keySet().iterator();itr.hasNext(); ){            Object key = itr.next();            System.out.println("key:="+key.toString());            if(null != key && key instanceof String) {                String sKey = (String)key;                buf.append("Content-Disposition: form-data; name=\"").append(sKey).append("\"\r\n\r\n");                buf.append((String)param.get(sKey)).append("\r\n");                buf.append("--").append(boundary).append("\r\n");            }        }        return buf.toString().getBytes();    }
  相关解决方案