之前操作是这样的:
1.项目有一个二代身份证的扫描器,扫描过身份证后,照片会生成在一个指定的目录。
2.用户于去目录下找到这些照片,通过input type=file 上传。
3.用户点确定提交请求。打算改造成这样的:
1.扫描过身份证后,照片生成在指定的目录;
2.在页面上点确定后就能直接上传到服务器(不需要中间的选择照片步骤)。这样的目的是为了减少用户选择照片中间操作请教各位大大,如何实现这样的功能
1.项目有一个二代身份证的扫描器,扫描过身份证后,照片会生成在一个指定的目录。
2.用户于去目录下找到这些照片,通过input type=file 上传。
3.用户点确定提交请求。打算改造成这样的:
1.扫描过身份证后,照片生成在指定的目录;
2.在页面上点确定后就能直接上传到服务器(不需要中间的选择照片步骤)。这样的目的是为了减少用户选择照片中间操作请教各位大大,如何实现这样的功能
解决方案 »
- 紧急求助:如何解决response.getoutputstream和 response.getwriter的冲突
- 帮忙解决SSH NullPointerException的问题?
- jsp怎么在页面上动态显示数据?
- 用过prototype1.6.js吗?用过的进来看看,帮我解决一下这个问题
- 用JSF如何显示一个LIST对象的数据?
- 各位进来看看,小妹妹超级难题,,给高分---------------
- jsp连接sql server 出错,求助
- 救命!!奇怪问题!!还没有解决
- oracle中long字段中检索问题???<在线等待>
- javaee项目防止跨站攻击,安全过滤怎么搞,以前没弄过,求大神指点??急急急
- 求助:如何用js实现jsp页面画拓扑图?
- struts2 拦截器中读取参数问题!高手看过来!
如果一般的技术都能实现的话,那B/S去偷别人的东西也太简单了.
/**
*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();
}
:为了防止这样的问题出现,在缺省的情况下,大多数浏览器在Applet安全方面受到诸多的限制,几乎不能对系统进行任何“读”或“写”的操作: 1. 不允许Applet访问本地文件系统 是不是activex控件就可以比较顺利的完成我想要的功能?
<?xml version="1.0" encoding="UTF-8"?>
<project name="vfs" default="war" basedir=".">
<property name="project.dir" value="." />
<property name="project.name" value="vfs" />
<property name="dist.dir" value="${project.dir}/dist" />
<property name="deploy.dir" value="${dist.dir}/${project.name}" />
<property name="web.dir" value="${project.dir}/src/webroot" />
<property name="lib.dir" value="${project.dir}/lib" />
<property name="src.dir" value="${project.dir}/src" />
<property name="java.applet.dir" value="${src.dir}/applet/java" />
<property name="java.server.dir" value="${src.dir}/server/java" />
<property file="build.properties" />
<property environment="env" />
<property name="jarsigner" value="${env.JAVA_HOME}/bin/jarsigner.exe"/>
<path id="main-class-path">
<fileset dir="${lib.dir}" >
<include name="*" />
</fileset>
<fileset file="${j2ee.jar}" />
</path>
<target name="compile.applet" depends="init">
<javac destdir="${project.dir}/build/applet" deprecation="false"
debug="true" failonerror="true" target="1.5" optimize="false">
<src path="${java.applet.dir}" />
<classpath refid="main-class-path" />
</javac>
</target>
<target name="compile.server" depends="init">
<javac destdir="${project.dir}/build/server" deprecation="false"
debug="true" failonerror="true" target="1.5" optimize="false">
<src path="${java.server.dir}" />
<classpath refid="main-class-path" />
</javac>
</target>
<target name="init">
<mkdir dir="${project.dir}/dist" />
<mkdir dir="${deploy.dir}" />
<mkdir dir="${project.dir}/build/applet" />
<mkdir dir="${project.dir}/build/server" />
</target>
<target name="clean">
<echo message="Remove the dist file" />
<delete dir="${deploy.dir}" />
<delete dir="${project}/build/applet" />
</target>
<target name="Generate_key" description="生成数字证书" >
<echo message="生成数字证书...." />
<genkey alias="swan" storepass="${storepass}" keypass="${keypass}" validity="${validity}" keystore="${keystore.file}">
<dname>
<param name="CN" value="${dname.CN}" />
<param name="OU" value="${dname.OU}" />
<param name="O" value="${dname.O}" />
<param name="C" value="${dname.C}" />
<param name="L" value="${dname.L}" />
<param name="ST" value="${dname.ST}" />
</dname>
</genkey>
<echo message="证书生成成功." />
</target>
<target name="war" depends="init,compile.applet,compile.server">
<mkdir dir="${dist.dir}/tmp" />
<mkdir dir="${deploy.dir}/WEB-INF/lib" />
<copy todir="${dist.dir}/tmp">
<fileset dir="${project.dir}/build/applet" />
</copy>
<copy todir="${deploy.dir}">
<fileset dir="${web.dir}" />
</copy>
<jar destfile="${deploy.dir}/upload_utils_frames/unsigned_upload.jar">
<fileset dir="${dist.dir}/tmp" />
</jar>
<!--
<genkey
keystore="${upload.keystore.filename}"
validity="3650"
alias="${upload.keystore.alias}"
storepass="${upload.keystore.storepass}">
<dname>
<param name="CN" value="CN" />
<param name="OU" value="PAIC.COM" />
<param name="O" value="PINGAN" />
<param name="L" value="SZ" />
<param name="S" value="GD" />
<param name="C" value="ZH" />
</dname>
</genkey>
-->
<signjar
signedjar="${deploy.dir}/upload_utils_frames/upload.jar"
alias="${upload.keystore.alias}"
jar="${deploy.dir}/upload_utils_frames/unsigned_upload.jar"
storepass="${upload.keystore.storepass}"
keystore="${upload.keystore.filename}"
verbose="true" />
<delete dir="${dist.dir}/tmp" />
<copy todir="${deploy.dir}/WEB-INF/lib">
<fileset dir="${lib.dir}" />
</copy>
<copy todir="${deploy.dir}/WEB-INF/classes">
<fileset dir="${project.dir}/build/server" />
</copy>
</target>
<!--
<target name="signJar">
<echo message="jarsigner..." />
<exec executable="${jarsigner}" dir="${deploy.dir}/upload_utils_frames/">
<arg line="-keystore"/>
<arg value="${upload.keystore.filename}"/>
<arg line="-storepass"/>
<arg value="${upload.keystore.storepass}"/>
<arg line="upload.jar"/>
<arg line="${upload.keystore.alias}"/>
</exec>
</target>
-->
</project>
目前换了一个方法,获取到图片的base64编码,将这个编码传到另外一个jsp页面里进行处理,生成一个文件并保存,好像有些希望