1

我想将上传的文件存储在java中的特定位置。如果我上传a.pdf,那么我希望它存储在"/home/rahul/doc/upload/". 我经历了一些堆栈溢出的问题和答案,但我对解决方案不满意。

我正在与Play Framework 2.1.2. 我不和我一起工作servlet

我正在上传,但它正在将文件存储到临时目录中,但我希望将该文件存储到文件夹中,而不是临时文件,我希望文件夹中的文件(如 a.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();

}

但我对这个解决方案不满意,我正在上传多个 doc 文件。

例如。我上传了一个文档 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 不存在,您应该执行一些检查以防止错误和/或覆盖。典型的做法是,如果已经存在同名文件,则增加文件名,例如发送a.pdf3 次应将文件保存为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 回答