2016-04-16 23 views
0

シンプルなHTMLページからファイルのアップロードを受け取り、そのファイルで何かを行い、操作したファイルをユーザーに返す単純なJavaサーブレットを作成したいと思います。サーブレットでファイルをアップロードしてダウンロードする

ファイルアップロードイベントは、サーバー側のサーブレットのdoPostメソッドによって処理されます。要件は、ファイルをアップロードしてサーバー側で処理した直後に[名前を付けて保存...]ウィンドウが表示され、生成されたファイルをユーザーのコンピュータに保存できることです。

ファイルのアップロードはdoPostによって処理され、ファイルのダウンロードはサーブレットのdoGetメソッドによって処理されます。これらの2つの出来事を何とか結びつけることは可能ですか?

ファイルアップロードイベントの応答としてバイトコンテンツを受信できますか?私はajax投稿を使ってファイルをアップロードし、ブラウザにコンテンツを送り返すことができ、クライアント側でこのメッセージを表示することができます。

ポストリクエストのレスポンスとしてバイナリコンテンツを受け取り、受け取ったバイトをファイルに保存するための "save as ..."ウィンドウを強制的にポップアップさせる巧妙なJavaスクリプトコードを書くことは可能ですか? ?

別の解決策は、新たに生成されたコンテンツは、サーバー上の一時ディレクトリ

  • IDやファイルのパスにファイルに保存されているサーバー側のAJAX
    1. ファイルアップロード可能性があり
    2. クライアント(Javaスクリプト)は、生成されたファイルのIDを受信し、すぐに新しいGET要求をファイルダウンロードサーブレットに送信します。
    3. ファイルダウンロードサーブレットはファイルのID /パスを受け取り、tempフォルダからそれを読み取り、クライアントのWebブラウザにバクトを送信します。

    このシナリオのベストプラクティスは何ですか?

  • +1

    * "どうにかこれらの2つのイベントを結びつけることはできますか?"単にそのdo​​Get()メソッドを呼び出すURLにリダイレクトを送信しますか?アドバイスのために – BalusC

    +0

    Thx。私はwindow.location.href = dataを追加しました。 ajax POSTコールバック成功メソッドと成功:function(msg) – zappee

    答えて

    -1
    import gwtupload.server.UploadAction; 
    import gwtupload.server.exceptions.UploadActionException; 
    
    import org.apache.commons.fileupload.FileItem; 
    
    import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.IOException; 
    import java.util.Hashtable; 
    import java.util.List; 
    
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    
    
    
    
    /** 
    * This is an example of how to use UploadAction class. 
    * 
    * This servlet saves all received files in a temporary folder, 
    * and deletes them when the user sends a remove request. 
    * 
    * @author Manolo Carrasco Moñino 
    * 
    */ 
    public class SampleUploadServlet extends UploadAction { 
    
        private static final long serialVersionUID = 1L; 
    
        Hashtable<String, String> receivedContentTypes = new Hashtable<String, String>(); 
        /** 
        * Maintain a list with received files and their content types. 
        */ 
        Hashtable<String, File> receivedFiles = new Hashtable<String, File>(); 
    
        /** 
        * Override executeAction to save the received files in a custom place 
        * and delete this items from session. 
        */ 
        @Override 
        public String executeAction(HttpServletRequest request, List<FileItem> sessionFiles) throws UploadActionException { 
        String response = ""; 
        int cont = 0; 
        for (FileItem item : sessionFiles) { 
         if (false == item.isFormField()) { 
         cont++; 
         try { 
          /// Create a new file based on the remote file name in the client 
          // String saveName = item.getName().replaceAll("[\\\\/><\\|\\s\"'{}()\\[\\]]+", "_"); 
          // File file =new File("/tmp/" + saveName); 
    
          /// Create a temporary file placed in /tmp (only works in unix) 
          // File file = File.createTempFile("upload-", ".bin", new File("/tmp")); 
    
          /// Create a temporary file placed in the default system temp folder 
          File file = File.createTempFile("upload-", ".bin"); 
          item.write(file); 
    
          /// Save a list with the received files 
          receivedFiles.put(item.getFieldName(), file); 
          receivedContentTypes.put(item.getFieldName(), item.getContentType()); 
    
          /// Compose a xml message with the full file information 
          response += "<file-" + cont + "-field>" + item.getFieldName() + "</file-" + cont + "-field>\n"; 
          response += "<file-" + cont + "-name>" + item.getName() + "</file-" + cont + "-name>\n"; 
          response += "<file-" + cont + "-size>" + item.getSize() + "</file-" + cont + "-size>\n"; 
          response += "<file-" + cont + "-type>" + item.getContentType() + "</file-" + cont + "type>\n"; 
         } 
         catch (Exception e) 
         { 
         } 
         } 
        } 
    
        /// Remove files from session because we have a copy of them 
        removeSessionFileItems(request); 
    
        /// Send information of the received files to the client. 
        return "<response>\n" + response + "</response>\n"; 
        } 
    
        /** 
        * Get the content of an uploaded file. 
        */ 
        @Override 
        public void getUploadedFile(HttpServletRequest request, HttpServletResponse response) throws IOException { 
        String fieldName = request.getParameter(PARAM_SHOW); 
        File f = receivedFiles.get(fieldName); 
        if (f != null) { 
         response.setContentType(receivedContentTypes.get(fieldName)); 
         FileInputStream is = new FileInputStream(f); 
         copyFromInputStreamToOutputStream(is, response.getOutputStream()); 
        } else { 
         renderXmlResponse(request, response, ERROR_ITEM_NOT_FOUND); 
        } 
        } 
    
        /** 
        * Remove a file when the user sends a delete request. 
        */ 
        @Override 
        public void removeItem(HttpServletRequest request, String fieldName) throws UploadActionException { 
        File file = receivedFiles.get(fieldName); 
        receivedFiles.remove(fieldName); 
        receivedContentTypes.remove(fieldName); 
        if (file != null) { 
         file.delete(); 
        } 
        } 
    
    } 
    

    サーバー上のファイルをアップロードするコード。

    関連する問題