上传文件的名称和格式都已经在数据库表中规定好了,我只用在根据数据库表读取相关信息,然后限制上传文件的类型就好了,但是要求可以重复上传,并且第二次上传的文件能够替换上一次上传的文件。 但是在我进行重复上传的时候不知道为第二次文件上传内容能够覆盖前一次的,但是上传的文件会占的内存会越来越大。下面是我的部分代码:
String saveFilaName = getSaveFileName(fileName, request);
String filePath = getSaveFilePath(fileName, request);
File file = new File(filePath,saveFilaName);
// if (file.exists()){
// file.delete();
// }
file.deleteOnExit();
BufferedOutputStream bout = null;
FileOutputStream fout = null;
int blean = fileBytes.length;
try{
file.createNewFile();
fout = new FileOutputStream(file,true);
bout = new BufferedOutputStream(fout);
if (blean>1) {//修复上传 docx、xlsx 文件损坏问题
byte[] tmps = new byte[2];
tmps[0]=fileBytes[blean-2];
tmps[1]=fileBytes[blean-1];
if (Arrays.equals(tmps, HttpConstances.CRLF) ) {
bout.write(fileBytes,0,blean-2);
}else{
bout.write(fileBytes,0,blean);
}
}else{
bout.write(fileBytes,0,blean);
}
bout.flush();
}catch (Exception e) {
throw e;
}finally{
if(fout!=null){
fout.close();
}
if(bout!=null){
bout.close();
}
}
在上面的注释掉的代码,本来是可以删除文件的,但是如果输出流有问题,会导致现在的没法写进去,又将以前删除了, 所以考虑有没有更好的替换方法,或者思路。初次提问, 有啥不太清楚的地方大家多多原谅,麻烦了
1
luassuns 2019-10-04 14:47:56 +08:00 via iPhone 1
可以参考各种软件常用的 .swap .bak ?
|
2
gaobh 2019-10-04 14:56:51 +08:00 2
一般都是两个文件夹,一个是上传了还没有读取,一个是读取了备份文件夹,读取完就移到备份文件夹加.bak ,新来的文件覆盖上一个,备份文件为-2.bak
|
3
ruiyinjinqu OP 谢谢大家,我想的是在判断同名文件是否存在,存在的话修改文件名,然后在后面新文件上传成功后删除改名的文件,要是新文件上传失败则在 catch 里将文件名改回来就行了 :)
|