0

Eclipse、サーブレット、およびjspを使用して、ファイルをアップロードおよびダウンロードできるサーバーを構築しました。これはすべて私にとって非常に新しいものです。(詳細)

現在、アップロードシステムはファイルの名前で動作します。プログラムで各ファイルにランダムキーを割り当てたい。そして、そのキーを使用して、ユーザーはファイルをダウンロードできます。これは、データを構成ファイルなどに保存することを意味します:test.txt(file)fdjrke432(filekey)。また、ユーザーがファイルキーを入力すると、サーブレットはファイルをダウンロード用に渡します。

このために、ランダムな文字列ジェネレーターとrenameTo()を使用してみました。ただし、最初は機能しません。同じファイルを再度アップロードした場合にのみ機能します。そして、このシステムには欠陥があり、ユーザーはtest.txtの代わりにファイル「fdjrke432」を受け取ります。内容は同じですが、問題を確認できます。

私の問題に対する考え、提案、または解決策はありますか?

4

1 に答える 1

0

さて、セベック、あなたが尋ねてくれてうれしいです!これは非常に興味深いものであり、これを行うための魔法の方法はありません。答えは確かにあなたがアップロードしたファイルの名前を変更することです。ただし、ファイル名の前にランダムな文字列を追加することをお勧めします。のように: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 に答える