这个方法能尽量减少服务器上传文件操作的负担,虽然不能在上传前就给于判断大小。
1.给自己的文件设置2个值(类型试情况而定)
size1 = 一个表示允许上传的文件大小 4*1024*1024 (4M)
size2 = 一个表示允许写入的流大小 如 5*1024*1024 (5M)
2.然后再在输出流循环中设置一个最多循环次数 :
最多循环次数 = size2 / 8192 (注:8192 是 byte[] buffer = new byte[8192] 中的8192相等 )
我这里 4*1024*1024 / 8192 = 512
让其上传的大小尽量小.......
3.最后输出完的时候判断一哈输出的文件大小(服务器本地)是否大于 size1 ,
如果大就说明上传的文件超重!可以直接 myFile.delete()
例子代码 :
try{
String upFilePath="d://kingsoft.iso";
String myFilePath="d://one.iso";
long size1=4*1024*1024;
long size2=5*1024*1024;
long count=size2/8192;//循环次数
File upFile=new File(upFilePath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream stream = new FileInputStream(upFile);
OutputStream bos = new FileOutputStream(myFilePath);
int bytesRead = 0;
byte[] buffer = new byte[8192];
long i;
for (i=0;((bytesRead = stream.read(buffer, 0, 8192)) != -1)&&i<count;i++) {
bos.write(buffer, 0, bytesRead);
}
System.out.println (" i = "+i);
bos.close();
File myFile=new File(myFilePath);
if(myFile.length()>size1){ //4M
//afile.delete(); //此处可删除上传不成功的文件
System.out.println ( "the file size has a error!!!");
}
else{
System.out.println ("The file has been written to ");
}
}catch(Exception e){
e.printStackTrace();
}
还未定稿,尚待商榷!