0

我已经构建了一个服务器,您可以使用 Eclipse、servlet 和 jsp 将文件上传到和下载,这对我来说都是全新的。(更多信息)

目前上传系统使用文件名。我想以编程方式为每个文件分配一个随机密钥。使用该密钥,用户可以下载文件。这意味着将数据保存在配置文件或类似的文件中:test.txt(file) fdjrke432(filekey)。当用户输入文件密钥时,servlet 将传递文件以供下载。

为此,我尝试使用随机字符串生成器和 renameTo()。但它第一次不起作用,只有当我再次上传相同的文件时它才起作用。而且这个系统有缺陷,用户会收到文件“fdjrke432”而不是test.txt,它们的内容是一样的但是你可以看到问题。

对我的问题有任何想法、建议或解决方案吗?

4

1 回答 1

0

好吧,Sebek,我很高兴你问!这是一个非常有趣的方法,没有神奇的方法可以做到这一点。答案确实是重命名您上传的文件。但我建议在文件名前添加随机字符串;比如:fdjrke432test.txt。尝试这个:

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
于 2012-12-16T21:31:38.277 回答