[新人求助]文件在可以进行重复上传,怎么让后面上传的文件替换前面上传的同名文件?

2019-10-04 14:16:26 +08:00
 ruiyinjinqu

上传文件的名称和格式都已经在数据库表中规定好了,我只用在根据数据库表读取相关信息,然后限制上传文件的类型就好了,但是要求可以重复上传,并且第二次上传的文件能够替换上一次上传的文件。 但是在我进行重复上传的时候不知道为第二次文件上传内容能够覆盖前一次的,但是上传的文件会占的内存会越来越大。下面是我的部分代码:
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();
}
}
在上面的注释掉的代码,本来是可以删除文件的,但是如果输出流有问题,会导致现在的没法写进去,又将以前删除了, 所以考虑有没有更好的替换方法,或者思路。初次提问, 有啥不太清楚的地方大家多多原谅,麻烦了

3841 次点击
所在节点    Java
3 条回复
luassuns
2019-10-04 14:47:56 +08:00
可以参考各种软件常用的 .swap .bak ?
gaobh
2019-10-04 14:56:51 +08:00
一般都是两个文件夹,一个是上传了还没有读取,一个是读取了备份文件夹,读取完就移到备份文件夹加.bak ,新来的文件覆盖上一个,备份文件为-2.bak
ruiyinjinqu
2019-10-05 15:39:28 +08:00
谢谢大家,我想的是在判断同名文件是否存在,存在的话修改文件名,然后在后面新文件上传成功后删除改名的文件,要是新文件上传失败则在 catch 里将文件名改回来就行了 :)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/606291

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX