使用文件类型输入时检索文件名

时间:2012-12-19 06:40:57

标签: java spring file-upload

我有一个jsp,其中包含此代码段。

<form name="AudioFileConversionForm" enctype="multipart/form-data" method="post" >
Choose File: <input type="file" id="audioFile" name="audioFile"><br>
<input type="submit" value="upload">
</form>

这是spring中的控制器。

public String convertFile(HttpServletRequest request, HttpSession session) {

    String audioFile = request.getParameter("audioFile");
    System.out.println(request.getParameter("audioFile"));
    System.out.println("Audio File Conversion Successful");
}

我无法检索文件名,显示null。 我知道我可以使用JQuery或javascript检索名称,但我不想同时使用它们。我想用纯java来做。 有人可以帮帮我吗?

5 个答案:

答案 0 :(得分:16)

上传文件时,requestorg.springframework.web.multipart.MultipartHttpServletRequest的实例。因此,您可以在方法convertFile()中强制转换它。见下文:

public String convertFile(HttpServletRequest request, HttpSession session) {
    // cast request
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    // You can get your file from request
    CommonsMultipartFile multipartFile =  null; // multipart file class depends on which class you use assuming you are using org.springframework.web.multipart.commons.CommonsMultipartFile

    Iterator<String> iterator = multipartRequest.getFileNames();

    while (iterator.hasNext()) {
        String key = (String) iterator.next();
        // create multipartFile array if you upload multiple files
        multipartFile = (CommonsMultipartFile) multipartRequest.getFile(key);
    }

    // logic for conversion
}
  

但是我无法检索(接收空值)我在JSP页面中选择的文件的名称。

---&GT;要获取文件名,您可以将其命名为:

multipartFile.getOriginalFilename();  // get filename on client's machine
multipartFile.getContentType();       // get content type, you can recognize which kind of file is, pdf or image or doc etc
multipartFile.getSize()          // get file size in bytes

要使文件上传工作,您需要确保创建多部分解析器bean,如下所示:

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

    <!-- one of the properties available; the maximum file size in bytes -->
    <property name="maxUploadSize" value="100000"/>
</bean>

参考:Spring documentation

答案 1 :(得分:3)

使用MultipartFile实用程序并尝试此

MultipartRequest multipartRequest = (MultipartRequest) request;
                Map map = multipartRequest.getFileMap();
                MultipartFile mfile = null;
                for (Iterator iter = map.values().iterator(); iter.hasNext();) {
                    mfile = (MultipartFile) iter.next();
                                String fileName = mfile.getOriginalFilename()
    }

或者你可以试试apache commons文件上传。

点击此链接:http://commons.apache.org/fileupload/using.html

答案 2 :(得分:2)

无法直接检索文件名。您可以使用Apache Commons Fileupload API -

// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();

    if (item.isFormField()) {
       // Process a normal field
       String name = item.getFieldName();
       String value = item.getString();

    } else {
        // Process a file upload field 
    String fileName = item.getName();
    // DO further processing

    }
}

更多细节 -

http://commons.apache.org/fileupload/using.html

它也可以用Java完成,但显然需要更多的代码。

答案 3 :(得分:1)

但是,首先,您需要 Commons Fileupload API ,这将帮助您使用file.getFieldName()来显示表单字段名称和{{ 1}}显示文件类型file.getContentType()以显示文件名

file.getName()

答案 4 :(得分:0)

Iterator iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();

    if (item.isFormField()) {
       // Process a normal field
       String name = item.getFieldName();
       String value = item.getString();

    } else {
        // Process a file upload field 
    String fileName = item.getName();
    // DO further processing

    }
}