2012-12-19 14 views
8

このコードスニペットに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を使用してそれをしたい。 誰も助けてくれますか?

+0

あなたはのいずれかを試してみましたあなたが解決策を持っているかどうかにかかわらず、私たちに知らせてください。 – Ravi

+0

私は答えを一つ一つ試しています。私は確かに、以下から最も適切な答えを更新します。答えをありがとうございました。 – Freakyuser

答えて

12

ファイルをアップロードすると、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 
} 

は、しかし、私は(NULL値を受け取る)私は、JSPページで選択したファイルの名前を取得することができません。

--->あなたのようにそれを得ることができ、ファイル名を取得するには、次のファイルのアップロードを動作させるために

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

+0

私はこの回答を受け入れていますが、 'CommonsMultiPartFile'のインスタンスを作成するためのコードを追加することをお勧めしますか?これは、入場者の作業を容易にします。あるいは、同じことに関してそれらを導く方法やリンク? – Freakyuser

+0

@Freakyuser:私は答えを編集し、コードを追加しました。 :) –

2

使用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のコモンズのファイルのアップロードを試すことができますしてみてください。

このリンクをチェック:http://commons.apache.org/fileupload/using.html

2

ファイル名を直接取得することはできません。

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

それはまた、単にJavaので行うことができますが、明らかに多くのコードが必要となります -

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

    } 
} 

詳細 - あなたは、Apache CommonsのファイルアップロードのAPIを使用することができます。

1

しかし、すべての最初の、あなたはコモンズFileuが必要になりますPLOADのAPI ファイル名を表示するには、[ファイルfile.getName()タイプを表示するには、フォームフィールド名file.getContentType()を表示するためにfile.getFieldName()を使用するのに役立ちます

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)'が空のリストを返しています。つまり、 'FileItem file =(FileItem)items.get(0)'の 'IndexOutOfBoundsException'です。 – Freakyuser

+0

@Freakyuser 'upload.parseRequest(リクエスト);'ファイルの配列を作成します。 'arrayindexoutofbound'エラーを表示している場合は、ファイルリクエストを取得しています。 – 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 

    } 
} 
関連する問題