我已经构建了一个可以上传文件和下载的服务器,使用Eclipse,servlet和jsp,这对我来说都是新手。 (more info)。
目前,上传系统使用文件名。我想以编程方式为每个文件分配一个随机密钥。使用该密钥,用户可以下载该文件。这意味着将数据保存在配置文件中,例如:test.txt(file)fdjrke432(filekey)。当用户输入文件密钥时,servlet将传递文件以供下载。
为此,我尝试过使用随机字符串生成器和renameTo()。但它第一次不起作用,只有当我再次上传相同的文件时才能正常工作。而且这个系统存在缺陷,用户将收到文件“fdjrke432”而不是test.txt,它们的内容相同但你可以看到问题。
对我的问题有任何想法,建议或解决方案吗?
答案 0 :(得分:0)
filekey= RenameRandom();
File renamedUploadFile = new File(uploadFolder + File.separator+ filekey+ fileName);
item.write(renamedUploadFile);
//remember to give the user the filekey
带
public String RenameRandom()
{
final int LENGTH = 8;
StringBuffer sb = new StringBuffer();
for (int x = 0; x < LENGTH; x++)
{
sb.append((char)((int)(Math.random()*26)+97));
}
System.out.println(sb.toString());
return sb.toString();
}
要从服务器删除或下载文件,您需要找到它,用户将输入密钥,您只需要在上传文件夹中搜索以该密钥开头的文件:
filekey= request.getParameter("filekey");
File f = new File(getServletContext().getRealPath("") + File.separator+"data");
File[] matchingFiles = f.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.startsWith(filekey);
}
});
String newfilename = matchingFiles[0].getName();
// now delete or download newfilename