最近遇到個這樣的問題(在不使用組件【如jspsmartupload】的情況下)在web頁面上如果一個有個連接,連接的的是文本文件,當左鍵點擊的話會查看這個文件,右鍵點擊可以下載.但是如果是windows不識別的文件,左鍵點擊直接就下載了比如zip,那如何點擊左鍵直接下載.txt的文本文件呢?
要直接下載一個文件,我們需要做兩件事,第一件事是:設定響應的內容類為“application/octet-stream”,大小寫無關。第二件事是:設置HTTP的響應頭名字為:Content-Disposition,設定值為:attachment; filename = theFileName。這里的theFileName就是出現在文件下載對話框里的默認文件名,通常和所下載的文件名字相同,但也可以不同。
代碼
- <meta http-equiv="Content-Type" content="text/html; charset=gbk">
- <HTML>
- <HEAD>
-
- </HEAD>
-
- <BODY>
- <a href = "download1.jsp?filepath=d:\\&filename=1a.txt" >downloadtest1</a>
-
- </BODY>
- </HTML>
這是頁面上的連接,我傳了個路徑和文件名
代碼
- <%
- String filename = request.getParameter("filename");
- String filepath = request.getParameter("filepath");
- int i = 0;
- response.setContentType("application/octet-stream");
- response.setHeader("Content-Disposition","attachment;filename = "+filename);
- java.io.FileInputStream fileInputStream = new java.io.FileInputStream(filepath+filename);
- while((i= fileInputStream.read()) != -1){
- out.write(i);
- }
- %>
- <%
- String filename = request.getParameter("filename");
- String filepath = request.getParameter("filepath");
- int i = 0;
- response.setContentType("application/octet-stream");
- response.setHeader("Content-Disposition","attachment;filename = "+filename);
- java.io.FileInputStream fileInputStream = new java.io.FileInputStream(filepath+filename);
- while((i= fileInputStream.read()) != -1){
- out.write(i);
- }
- %>
這是被調用的download1.jsp,這個jsp就是執行直接下載文件。
參考一下JS來實現:
function svcode(obj) {
var winname = window.open('', '_blank', 'height=1,width=1,top=200,left=300');
winname.document.open('text/html', 'replace');
winname.document.writeln(obj.value);
winname.document.execCommand('saveas','','code.txt');
winname.close();
}