2012-07-30 36 views
0

我开发了一个用于以加密形式上载文件的已签名小程序。 我从jsp调用的这个小程序工作正常,但我的问题是: 我可以从jsp调用该小程序以这种方式返回jsp中的加密文件,并将该文件传递给服务器端? 我可以在applet或jsp中为该加密文件创建多部分文件并将其发送到服务器?如何将文件从applet返回给jsp

我运行小程序是这样的:

public static void encryptDecryptFile(String srcFileName, 
      String destFileName, Key key, int cipherMode) throws Exception { 
     OutputStream outputWriter = null; 
     InputStream inputReader = null;  
     try {     
      Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");   
      byte[] buf = cipherMode == Cipher.ENCRYPT_MODE ? new byte[100] 
        : new byte[128]; 
      int bufl; 
      cipher.init(cipherMode, key);   
      outputWriter = new FileOutputStream(destFileName); 
      inputReader = new FileInputStream(srcFileName); 
      while ((bufl = inputReader.read(buf)) != -1) {   
       byte[] encText = null; 
       if (cipherMode == Cipher.ENCRYPT_MODE) 
        encText = encrypt(copyBytes(buf, bufl), (PublicKey) key); 
       else 
        encText = decrypt(copyBytes(buf, bufl), (PrivateKey) key);    
       outputWriter.write(encText); 
      }   
     } catch (Exception e) {e.printStackTrace(); 
      throw e; 
     } finally { 
      try { 
       if (outputWriter != null) 
        outputWriter.close(); 
       if (inputReader != null) 
        inputReader.close(); 
      } catch (Exception e) { 
      } 
     } 
    } 

我调用JSP的样子:

<applet id="upload" name="upload" code="TestApplet.class" archive="Encrypt.jar" width="360" height="350"></applet> 
+0

您可以设置一个接受文件内容流并返回文件内容流的servlet。 – 2012-07-30 13:39:42

回答

3

最简单的方法将使用HttpClient Apache Commons库。你将不得不做这样的事情在你的小程序:

public void sendFile throws IOException { 
     HttpClient client = new HttpClient(); 
     PostMethod postMethod = new PostMethod("http://yourserverip:8080/yourServlet"); 

     File f = new File(destFileName); 

     postMethod.setRequestBody(new FileInputStream(f)); 
     postMethod.setRequestHeader("Content-type", 
      "text/xml; charset=ISO-8859-1"); 

     client.executeMethod(postMethod); 
     postMethod.releaseConnection(); 
    } 

这将触发你的servlet doPost()方法,你可以检索该文件。正如你所说的,你的applet应该被允许进行签名。

+0

*“您的小应用程序应该被允许执行此操作。”*如果服务器是从其中加载小应用程序的服务器,则不需要。这可以使用沙盒小程序完成。 applet可能还需要其他信息,但“打电话回家”不是其中之一。 – 2012-07-30 23:58:18

+0

“这”我的意思是从硬盘驱动器加载文件。 – 2012-07-31 06:13:00

+0

@EugenioCuevas非常感谢你,你解决了我的大问题。我在服务器端有函数接受多个参数并创建MultipartFile。 @RequestMapping(值= “/fileUpload.works”) 公共字符串uploadFile(@RequestParam( “FILE_PRIVACY”)字符串filePrivacy,@RequestParam( “FILE_KEYWORD”)字符串fileKeyword, @RequestParam( “FILE_COMMENTS”)字符串fileComments, @RequestParam(“FILE_TYPE”)字符串fileType, @RequestParam(“FILE_FOLDER”)字符串fileFolder, HttpServletRequest请求,HttpServletResponse响应){} 那么如何从给定函数传递此参数? – Balasaheb 2012-08-01 09:44:20