1

アップロードしたファイルをjavaの特定の場所に保存したい。アップロードする場合a.pdfは、これを に保存し"/home/rahul/doc/upload/"ます。スタック オーバーフローに関するいくつかの質問と回答を確認しましたが、解決策に満足していません。

私はで働いていPlay Framework 2.1.2ます。私は一緒に働いていませんservlet

アップロードしていますが、ファイルを一時ディレクトリに保存していますが、そのファイルを一時ファイルではなくフォルダーに保存したいのですが、.pdfのようなファイルを一時ファイルではなくフォルダーに保存したいのです。

public static Result upload() {
    MultipartFormData body = request().body().asMultipartFormData();
    FilePart filePart1 = body.getFile("filePart1");
    File newFile1 = new File("path in computer");
    File file1 = filePart1.getFile();
    InputStream isFile1 = new FileInputStream(file1);
    byte[] byteFile1 = IOUtils.toByteArray(isFile1);
    FileUtils.writeByteArrayToFile(newFile1, byteFile1);
    isFile1.close();

}

しかし、私はこの解決策に満足できず、複数のドキュメント ファイルをアップロードしています。

たとえば。私は1つのドキュメントab.docxをアップロードし、アップロード後に一時ディレクトリを保存し、ファイルは次のとおりです:

ファイルを一時的にアップロードしました

その場所は次のとおりです。/tmp/multipartBody5886394566842144137asTemporaryFile

しかし、私はこれが欲しい: /upload/ab.docx

これを修正する解決策を教えてください。

4

2 に答える 2

2

一時ファイルをアップロード フォルダーに入れる必要がある最後のステップとして、すべてが正しくrenameTo、ストリームをいじる必要はありません。次のように簡単です。

public static Result upload() {
    Http.MultipartFormData body = request().body().asMultipartFormData();
    FilePart upload = body.getFile("picture");

    if (upload != null) {
        String targetPath = "/your/target/upload-dir/" + upload.getFilename();
        upload.getFile().renameTo(new File(targetPath));
        return ok("File saved in " + targetPath);
    } else {
        return badRequest("Something Wrong");
    }
}

ところで、エラーや上書きを防ぐために、targetPath が存在しないかどうかのチェックを実装する必要があります。典型的なアプローチは、同じ名前のファイルが既に存在する場合にファイル名をインクリメントすることです。たとえば、3 回送信すると、ファイルは、、などa.pdfとして保存されます。a.pdfa_01.pdfa_02.pdf

于 2013-08-27T06:03:07.457 に答える
0

私はちょうどそれを完了しました。私のソリューションは正常に機能しています。

複数のファイルをアップロードする私の解決策は次のとおりです。

public static Result up() throws IOException{

            MultipartFormData body = request().body().asMultipartFormData();
                List<FilePart> resourceFiles=body.getFiles();
                InputStream input;
                OutputStream output;
                File part1;
                String prefix,suffix;
                for (FilePart picture:resourceFiles) {

                 part1 =picture.getFile();
                  input= new FileInputStream(part1);
                  prefix = FilenameUtils.getBaseName(picture.getFilename()); 
                    suffix = FilenameUtils.getExtension(picture.getFilename());

                    part1=new File("/home/rahul/Documents/upload",prefix+"."+suffix);
                    part1.createNewFile();

                    output = new FileOutputStream(part1);
                    IOUtils.copy(input, output);
                    Logger.info("Uploaded file successfully saved in " + part1.getAbsolutePath());

                }
于 2013-08-27T06:19:28.330 に答える