2012-12-19 17 views
8

Mam jsp z tym fragmentem kodu w nim. To jest mój kontroler w spring.Pobranie nazwy pliku przy użyciu typu pliku wejściowego

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"); 
} 

jestem w stanie pobrać nazwę pliku, to pokazuje null. Wiem, że mogę pobrać nazwę za pomocą JQuery lub javascript, ale nie chcę używać ich obu. Chcę to zrobić za pomocą czystej Java. Czy ktoś może mi pomóc?

+0

próbowałeś którykolwiek Kod, jeśli tak, to daj nam znać, czy masz rozwiązanie, czy nie, a jeśli nie, to objaśnij swoje wymagania dalej. – Ravi

+0

Próbuję odpowiedzi jeden po drugim. Na pewno zaktualizuję najlepiej dopasowaną odpowiedź od dołu.Dziękuję wszystkim za odpowiedzi. – Freakyuser

Odpowiedz

12

Po przesłaniu pliku, request jest instancją org.springframework.web.multipart.MultipartHttpServletRequest. Możesz więc użyć go w swojej metodzie convertFile(). Patrz poniżej:

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 
} 

Jednak jestem w stanie pobrać (odbieranie wartości null) nazwę pliku, który wybrałem na stronie JSP.

---> Aby uzyskać nazwę pliku można go pobrać jako:

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 

Aby uczynić pracę przesyłania plików, trzeba upewnić się, że tworzenie wieloczęściowy rozpoznawania fasoli jak poniżej:

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

referencyjny: Spring documentation

+0

Akceptuję tę odpowiedź, ale czy mogę zaproponować dodanie kodu do utworzenia instancji dla 'CommonsMultiPartFile'? Pomoże to pracownikom w ruchu. A może sposób lub link prowadzący ich w odniesieniu do tego samego? – Freakyuser

+0

@Freakyuser: Edytowałem odpowiedź i dodałem kod. :) –

2

użycie narzędzie MultipartFile i spróbować

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

Albo można spróbować Apache Commons przesyłanie plików.

Sprawdź ten link: http://commons.apache.org/fileupload/using.html

2

Nazwa pliku nie może być bezpośrednio pobierane. Można użyć 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 

    } 
} 

Więcej szczegółów -

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

To można zrobić tylko z Java, ale oczywiście będą musieli więcej kodu.

1

Ale, przede wszystkim, trzeba będzie Commons Fileu pload API, które pomogą Ci wykorzystać file.getFieldName() aby wyświetlić pól formularza Nazwa i file.getContentType() wyświetlać typ pliku i file.getName() wyświetlać Nazwa pliku

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

'upload.parseRequest (request)' zwraca pustą listę. Zatem 'IndexOutOfBoundsException' na' FileItem file = (FileItem) items.get (0) '. – Freakyuser

+0

@Freakyuser 'upload.parseRequest (request);' utwórz tablicę z plikiem. Jeśli wyświetla błąd 'arrayindexoutofbound', co oznacza, że ​​otrzymuje żądanie pliku. – Ravi

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 

    } 
} 
Powiązane problemy