日期:2014-05-16 浏览次数:20350 次
看书上(JSP应用与开发技术)使用JSP文件上传,写了个真无语,压根就有很多问题,上传500KB的文件传过去后只剩350KB,而且编码必须是GBK、GB2312,否则传过去的文件都数据截取不正确。
琢磨了许久,发现问题出在
int startPos = ((file.substring(0,pos)).getBytes()).length;
//取得文件数据的结束的位置
int endPos =((file.substring(0,boundaryLocation)).getBytes()).length;
这里,问题就是根据字符串获取的字节数,然后从字节数组里截取根本就不正确。而后自己实现了个,不用字符串字节,而是自己以字节找字节。如下:
UploadTelRecord.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@page import="java.io.DataInputStream"%> <%@page import="java.io.FileOutputStream"%> <%@page import="java.io.File"%> <%@page import="java.net.URLEncoder" %> <!-- 上传通话录音文件 --> <%! //在字节数组里查找某个字节数组,找到返回>=0,未找到返回-1 private int byteIndexOf(byte[] data,byte[] search,int start) { int index=-1; int len=search.length; for(int i=start,j=0;i<data.length;i++) { int temp=i; j=0; while(data[temp]==search[j]) { System.out.println((j+1)+",值:"+data[temp]+","+search[j]); //计数 j++; temp++; if(j==len) { index=i; return index; } } } return index; } %> <% String getAction=request.getParameter("action"); if(getAction!=null&&(getAction.equals("upload"))) //上传文件 { //定义上传的最大文件字节数1M int MAX_SIZE=1024000; String rootPath; DataInputStream in=null; FileOutputStream fileOut=null; String remoteAddr=request.getRemoteAddr(); String serverName=request.getServerName(); String realPath=request.getRealPath("/"); realPath=realPath.substring(0,realPath.lastIndexOf("\\")); //设置保存文件的目录 rootPath=realPath+ "\\upload\\telRecord\\"; //取得客户端上传的数据类型 String contentType=request.getContentType(); try{ if(contentType.indexOf("multipart/form-data")>=0){ in=new DataInputStream(request.getInputStream());