1

私のJSPページは

<a href="xxx.lice">xx.lice</a>

リンクをクリックしたときにファイルを開くのではなく、ユーザーにファイルをダウンロードしてもらいたい。

「シラミ」拡張機能をTomcatに入れてみましたがweb.xml、何も起こりませんでした。

<mime-mapping> 
    <extension>lic</extension> 
    <mime-type>application/lic</mime-type> 
</mime-mapping>`

以下の別のアプローチも試しましたが、何も起こりませんでした

  function openfile(url)   {   
      var a =window.open(url,"_blank","");   
      a.document.execCommand("SaveAs");   
      a.close();   
  }

  <a href="#" onclick='openfile('xxx.lice')' />

次に、前のページでいくつかのコードを下に追加しようとしましたが、ダイアログは存在しますが、他の情報は表示されません<a>。タグをクリックしてからポップアップ「saveas」ダイアログを開始してください。

      String url = request.getRequestURL().substring(0,request.getRequestURL().lastIndexOf("/")+1) + "upload/xxx.lice";
//            //set .lic to mime type
//            String filename = "xxx.lice";
//            String mimeType = new MimetypesFileTypeMap().getContentType(filename);
//            response.setContentType( mimeType);
//            response.setHeader( "Content-Disposition", "attachment;filename="
//                    + filename );
            request.setAttribute("message", "Upload has been done successfully!\r\n The new license file is<a href=\""+ url +"\" >xxx.lice</a>");
4

1 に答える 1

2
  function openfile(url)   {   
      var a =window.open(url,"_blank","");   
  }

  <a href="#" onclick="openfile('SownloadLiceFileServlet')" />

そしてそのサーブレットで

  //set .lic to mime type
  String filename = "xxx.lice";
  String mimeType = new MimetypesFileTypeMap().getContentType(filename);
  response.setContentType( mimeType);
  response.setHeader( "Content-Disposition", "attachment;filename=" + filename );
  // Read the file content as a byte array
  java.io.File liceFile = new java.io.File("[File Path]");
  byte[] fileBytes = new byte[(int)liceFile.length()];
  java.io.FileInputStream liceFileStream = new java.io.FileInputStream(liceFile);
  liceFileStream.read(fileBytes);
  liceFileStream.close();
  //Push that byte array to the browser (user).
  ServletOutputStream sos = response.getOutputStream();
  sos.write(fileBytes);
于 2013-03-09T18:06:05.350 に答える