使用jspSmartUpload的下載檔案的經驗教訓

來源:互聯網
上載者:User
js|下載

  昨天晚上用jspSmartUpload下載檔案,寫了一個下載的頁面(Download.jsp)如下:

<%@ page contentType="text/html;charset=gb2312" %>
 <html>
<%@ page import="java.io.*,mail.util.Encoding" %>
<jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
  String filename =Encoding.encodingUnicode(request.getParameter("filename"));
  mail.DbBase dbbase=mail.DbBase.getInstance();
  String path=dbbase.getPath();
  // 初始化
  mySmartUpload.initialize(pageContext);
  // 設定contentDisposition為null以禁止瀏覽器自動開啟檔案,
  //保證點選連結後是下載檔案。若不設定,則下載的副檔名為
  //doc時,瀏覽器將自動用word開啟它。副檔名為pdf時,
  //瀏覽器將用acrobat開啟。
  mySmartUpload.setContentDisposition(null);
  // 下載檔案
  if(filename!=null){
    mySmartUpload.downloadFile(path+filename);
  }
%>
</body>
</html>

  執行下載時,檔案能正確下載,但是總是報錯。

java.lang.IllegalStateException: getOutputStream() has already been called for this response

  後來還才發現,執行下載的頁面,在Java指令碼範圍外(即<% ...%>之外),不要包含HTML代碼、空格、斷行符號或換行等字元,有的話將不能正確下載。不信的話,可以在上述源碼中%><%之間加入一個分行符號,再下載一下,保證出錯。因為它影響了返回給瀏覽器的資料流,導致解析出錯。

  修改後問題解決。



相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。