Retrieve the file name while using file type input

前端 未结 5 1584
南旧
南旧 2021-02-19 19:58

I have a jsp with this code snippet in it.

Choose Fil
相关标签:
5条回答
  • 2021-02-19 20:29

    File name cannot be directly retrieved. You can use 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
    
        }
    }
    

    More details -

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

    It can also be done with just Java but obviously more code will be required.

    0 讨论(0)
  • 2021-02-19 20:31

    When you upload the file, request is instance of org.springframework.web.multipart.MultipartHttpServletRequest. So you can cast it in your method convertFile(). See below :

    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
    }
    

    However I am unable to retrieve (receiving null value) the name of the file that I chose in the JSP page.

    ---> To get file name you can get it as :

    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
    

    To make file upload work, you need to make sure you are creating multipart resolver bean as below :

    <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>
    

    Reference : Spring documentation

    0 讨论(0)
  • 2021-02-19 20:31
    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
    
        }
    }
    
    0 讨论(0)
  • 2021-02-19 20:33

    use MultipartFile utility and try this

    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()
        }
    

    Or you can try apache commons file upload.

    Check this link : http://commons.apache.org/fileupload/using.html

    0 讨论(0)
  • 2021-02-19 20:33

    But, first of all, you will need Commons Fileupload API, which will help you to use file.getFieldName() to display the Form Field Name and file.getContentType() to display Type of File and file.getName() to display File Name

    public String convertFile(HttpServletRequest request, HttpSession session) {
      boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if(!isMultipart) {
                out.println("File Not Uploaded");
        }
        else{
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            List items = null;
            try {
                items = upload.parseRequest(request);
              } catch (FileUploadException e) {
                e.printStackTrace();
            }
            try {
                FileItem file = (FileItem) items.get(0);
                out.print("Field Name :"+file.getFieldName()); // Display the field name
                out.print("Content Type :"+file.getContentType()); // Display Type of File
                out.print("File Name :"+file.getName()); // Display File Name
            } catch (Exception e) {
                out.print(e);
            }
        }
     }
    
    0 讨论(0)
提交回复
热议问题