一旦调用了Spring控制器方法,我可以确认该文件是完全上传的吗?

时间:2015-12-25 19:19:18

标签: spring spring-mvc

我正在尝试在OpenShift服务器数据目录(OPENSHIFT_DATA_DIR)中上传excel文件,并将数据存储在OpenShift提供的MySQL数据库中。我遵循以下步骤:

  1. 将excel文件上传到OPENSHIFT_DATA_DIR。
  2. 从OPENSHIFT_DATA_DIR读取excel文件并解析它。
  3. 将解析数据更新/插入数据库
  4. 我可以使用以下代码将excel文件上传到OPENSHIFT_DATA_DIR。我使用Spring的多部分解析器

    private void uploadExcelFile(MultipartFile file) throws IOException{
            String fileNameWithPath = System.getenv("OPENSHIFT_DATA_DIR")+"Test.xls";
            file.transferTo(new File(fileNameWithPath));
    
            //Start reading the excel file from OPENSHIFT_DATA_DIR
            .......
            .......
    }
    

    我将能够从OPENSHIFT_DATA_DIR读取excel文件,但我担心的是在阅读excel时我不确定文件是否已完全上传。

    一次" transferTo()"方法执行后我可以确认文件已完全上传吗?

    或者,如果文件未完全上传,我将如何处理?

1 个答案:

答案 0 :(得分:2)

transferTo() mothod调用之后,您可以使用传输的文件执行任何操作。 如果您阅读了transferTo()方法的文档,您会看到,它不是异步的。

Documentation says

void transferTo(File dest)
         throws IOException,
                IllegalStateException
     

将接收的文件传输到给定的目标文件。   这可以在文件系统中移动文件,在文件系统中复制文件,或将内存保存的内容保存到目标文件。如果目标文件已存在,则将首先将其删除。

     

如果文件已在文件系统中移动,则无法再次调用此操作。因此,只需调用此方法一次即可使用任何存储机制。

     

注意:使用Servlet 3.0多部分支持时,您需要配置相对于哪些文件将被复制的位置,如Part.write(java.lang.String)中所述。

     

参数:   dest - 目标文件   抛出:   IOException - 在读取或写入错误的情况下   IllegalStateException - 如果文件已经在文件系统中移动,并且不再可用于另一次传输