我想实现文件上传功能啊
用jsp+struts 实现有一段代码是这样的:
String contentType=request.getContentType();
// out.println("<p>客服端上传的数据类型="+contentType+"</p>");
try{
if(contentType.indexOf("multipart/form-data")>=0)
{
in=new DataInputStream(request.getInputStream());// 读入上传的数据
int formDataLength=request.getContentLength();
if(formDataLength>MAX_SIZE)
{
out.println("<p>上传的文件字节数不可以超过"+MAX_SIZE+"</p>");
out.println(s);
return null;
}
byte dataBytes[]=new byte[formDataLength];// 保存上传数据
int byteRead=0;
int totalByteRead=0;
int tempchar;
while((tempchar = in.read()) != -1)// 上传的数据保存在byte数组
{
byteRead=in.read(dataBytes,totalByteRead,formDataLength);
totalByteRead+=byteRead;
}执行过程中发现 一开始in.read的返回值就为-1了
还出现这个错误了:javax.servlet.ServletException: String index out of range: -1
错在哪里呢 怎么回事呢 请高人指点。
用jsp+struts 实现有一段代码是这样的:
String contentType=request.getContentType();
// out.println("<p>客服端上传的数据类型="+contentType+"</p>");
try{
if(contentType.indexOf("multipart/form-data")>=0)
{
in=new DataInputStream(request.getInputStream());// 读入上传的数据
int formDataLength=request.getContentLength();
if(formDataLength>MAX_SIZE)
{
out.println("<p>上传的文件字节数不可以超过"+MAX_SIZE+"</p>");
out.println(s);
return null;
}
byte dataBytes[]=new byte[formDataLength];// 保存上传数据
int byteRead=0;
int totalByteRead=0;
int tempchar;
while((tempchar = in.read()) != -1)// 上传的数据保存在byte数组
{
byteRead=in.read(dataBytes,totalByteRead,formDataLength);
totalByteRead+=byteRead;
}执行过程中发现 一开始in.read的返回值就为-1了
还出现这个错误了:javax.servlet.ServletException: String index out of range: -1
错在哪里呢 怎么回事呢 请高人指点。
{throw new ServletException(ex.getMessage());}
但我觉得是在in.read出了问题啊 一开始读的时候就发现 byteRead为-1了
<table border="0" width="700" >
<tr align="left" bgcolor="#efefef">
<td>上传文件:<input type="file" name="file1" size="40" ID="File1"></td>
</tr>
<tr align=left bgcolor="#efefef">
<td>所属会议:<select name="mname" onChange="onCategoryChange(this);" ID="Select1">
<% List mnames=meet.findMName();
for(int i=0;i<mnames.size();i++)
{
String name= (String)mnames.get(i);%>
<option value='<%=name%>'><%=name %></option>
<%
}%>
</select>
</td>
</tr>
<tr align=left bgcolor="#efefef">
<td>发布时间:<input type="text" name="createtime" id="times" value="<%=new java.sql.Date(new java.util.Date().getTime())%>">
发布者:<input type="text" name="username" id="author" ></td>
</tr>
<tr align="center">
<td> <input type="submit" value="上传"></td>
</tr>
</table>
</form>
页面代码
{
byteRead=in.read(dataBytes,totalByteRead,formDataLength);
totalByteRead+=byteRead;
} 直接改成下面应该就可以了吧,直接从0位置往下读取formDataLength大小的字节 byteRead=in.read(dataBytes,0,formDataLength);
你可以参考一下jdoc