本文目錄一覽:
- 1、jsp文件上傳如何規定大小
- 2、請問jsp頁面如何能獲取到上傳文件的大小,我想通過獲取的大小,判斷該文件是否可以被上傳,請詳細點,謝謝
- 3、jsp頁面使用javascript獲取文件的大小
- 4、.jsp是什麼格式呀 ?
jsp文件上傳如何規定大小
這是jspsmartupload本身一個缺陷!用jspsmartupload上傳東西,當大小超過了某個值後就無法上傳了.也就報出了以下異常:
java.lang.OutOfMemoryError: Java heap space
如果是上傳小的東西,用這個jspsmartupload這個組件足夠了,但是上傳大的文件就不行了.建議用commonupload組件.
究其原因在jspsmartupload源碼中有:
m_totalBytes = m_request.getContentLength();
m_binArray = new byte[m_totalBytes];
int j;
for(; i m_totalBytes; i += j)
….
而m_request就是HttpServletRequest,它一次將文件流全部讀入內存中,也就造成m_totalBytes超級的大,而在new byte[m_totalBytes];時就在內存在分配了一個超大的空間,內存受不了也就直接報異常了.所以除非改掉這種方式的上傳否則是沒法解決這個問題的.
而commonupload就不一般了,它可以設置一次讀取文件最大部分是多少,比部文件有200Mb,你設置一次讀取文件的大小是4MB,那麼也就超過了一次讀4MB到內存,然後就此4MB的部分寫入硬盤中的臨時文件中,然後再讀取下面的4MB,接着把內存的東西刷到硬盤中.也就不會一次讀入內存的東西太多,而造成內存的瀉漏.
以下是使用commonupload上傳的部分代碼
String fileName = ” “;
String appPath = request.getSession().getServletContext().getRealPath(“/”) ;
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(cacheSize); //緩衝大小
File temFile = new File(appPath+tempFileFold); //超過緩衝小放在臨時文件夾,再一步一步上傳
if(!temFile.exists()){
temFile.mkdirs();
}
factory.setRepository(temFile);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxFileSize); //最大大小
List fileList = null ;
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException e) {
if (e instanceof SizeLimitExceededException) {
System.out.println(“超過大小了,返回!”);
double maxSize = maxFileSize/(1024.0*1024.0);
if(maxSize1.0){
float fileSize = Math.round(maxSize*1000)/1000;
request.setAttribute(“message”, MessageResource.readByString(“file_size_overflow”)+fileSize+”M”);
}else{
double kMaxSize = maxFileSize/(1024.0);
float fileSize = Math.round(kMaxSize*100)/100;
request.setAttribute(“message”, MessageResource.readByString(“file_size_overflow”)+fileSize+”K”);
}
request.setAttribute(“page”, request.getParameter(“failpage”));
System.out.println(“page:”+request.getAttribute(“page”)+” messgae:”+request.getAttribute(“message”));
return “”;
}
e.printStackTrace();
}
if (fileList == null || fileList.size() == 0) {
System.out.println(“空文件,返回!”);
return “”;
}
// 得到所有上傳的文件
Iterator fileItr = fileList.iterator();
// 循環處理所有文件
while (fileItr.hasNext()) {
FileItem fileItem = null;
String path = null;
long size = 0;
// 得到當前文件
fileItem = (FileItem) fileItr.next();
// 忽略簡單form字段而不是上傳域的文件域(input type=”text” /等)
if (fileItem == null || fileItem.isFormField()) {
continue;
}
// 得到文件的完整路徑
path = fileItem.getName();
// 得到文件的大小
size = fileItem.getSize();
if (“”.equals(path) || size == 0) {
System.out.println(“空文件2,返回!”);
return “” ;
}
// 得到去除路徑的文件名
String t_name = path.substring(path.lastIndexOf(“\\”) + 1);
// 得到文件的擴展名(無擴展名時將得到全名)
String t_ext = t_name.substring(t_name.lastIndexOf(“.”) + 1);
String[] allowFiles = allowedFilesList.split(“,”);
boolean isPermited = false ;
for(String allowFile:allowFiles){
if(t_ext.equals(allowFile)){
isPermited = true ;
break ;
}
}
if(!isPermited){
request.setAttribute(“message”, t_ext+MessageResource.readByString(“file_format_error”)+allowedFilesList);
request.setAttribute(“page”, request.getParameter(“failpage”));
System.out.println(t_ext+”文件格式不合法,合法文件格式為:”+allowedFilesList);
return “” ;
}
long now = System.currentTimeMillis();
// 根據系統時間生成上傳後保存的文件名
String newFileName = String.valueOf(now)+”.”+t_ext;
// 保存的最終文件完整路徑,保存在web根目錄下的ImagesUploaded目錄下
File desctemFile = new File(appPath + fileLocationFold); //超過緩衝小放在臨時文件夾,再一步一步上傳
if(!desctemFile.exists()){
desctemFile.mkdirs();
}
String u_name = appPath + fileLocationFold
+ newFileName ;
fileName = fileLocationFold+newFileName ;
try {
fileItem.write(new File(u_name));
} catch (Exception e) {
e.printStackTrace();
}
}
return fileName ;
請問jsp頁面如何能獲取到上傳文件的大小,我想通過獲取的大小,判斷該文件是否可以被上傳,請詳細點,謝謝
因權限和安全限制,js是不能獲得本地文件大小的,除非安裝控件。
jsp獲取上傳文件大小方法如下:
long size=request.getContentLength() ;
在文件準備上傳之前就可以得到其大小。
當然了,在客戶端基本上不大可能獲取大文件大小的,必須是文件提交上傳開始後,在服務端獲取得到的,request.getContentLength() ; 可以在接受數據流之前就可以獲得當前要上傳的文件流大小。 這樣你可以在服務端控制文件上傳之前是否允許繼續接受數據流。
jsp頁面使用javascript獲取文件的大小
首先你要明白一些定義,
1 javascript 運行在客戶端,即用戶的瀏覽器上,
2 jsp運行服務器端,比如裝有tomcat的電腦上
3 HTML只會運行在客戶端瀏覽器上
3 放在HTML代碼中的javascript所以也只能運行在客戶端瀏覽器上
4 放在jsp中javascript在服務器端運行生成HTML代碼發送到客戶端瀏覽器上,所以放在jsp中的javascript最終還是只能運行在客戶端瀏覽器上
5 你欲獲取的附件大小在哪裡,客戶端還是服務器端呢,
6 目前考慮安全性方面,客戶端一般是禁止在其瀏覽器上運行的javascript防問其電腦的文件,而且不同的客戶端瀏覽器安全設置是不一樣的,所以如果想獲取客戶端文件大小是行不通的,
7 目前流行的解決辦法,一般既然是附件,都是要上傳到服務器上的,可以上傳的過程中在服務器端進行檢查,在上傳附件頁面要告訴客戶端用戶附件上傳大小的限制,這種提示在網絡會經常見到的(推薦JSP中我常用到的上傳組件jspSmartUpload)
希望這些有拋引作用
.jsp是什麼格式呀 ?
jsp格式文件是一種動態網頁技術標準,是用java語言編寫的動態網頁程序文件,主要出現在網站開發的過程當中。不過有些人會在下載的過程中無意間下載到jsp格式文件,比如downcc.com.jsp,出現這種情況應該是網站有防盜鏈功能的原因(意思A站的內容只允許在A站下載,B網站用就屬於盜鏈)。如果你是這種情況,那麼用下面這個辦法即可解決。
解決辦法其實也挺簡單:就是在下載鏈接上點擊鼠標右鍵然後選擇「另存為」即可下載了。
上面出現了一個小插曲,現在回到主題jsp文件怎麼打開的問題,作為普通網民或是網站開發者如何選擇適合自己的方式打開jsp文件呢?請看下面介紹三種方法:
記事本
如果你並非網站開發者,只是想打開jsp格式的文件看看的話,那麼每台電腦都有的記事本無疑是你最好的幫手了。方法是:打開一個記事本然後把你要打開的jsp文件拖入到記事本就可以了,打開后里是一些代碼。
當然,這些代碼只有學過jsp技術的網站開發人員才讀得懂具體的含義了。但是他們是不會用記事本來打開或編輯jsp文件的,因為如果用記事本來處理顯示得如此沒有條理的代碼,他們的腦細胞可要集體抗議了。下面這兩款工具更適合他們:
優點:電腦無需下載其他軟件即可實現打開jsp文件
缺點:顯示無條理、密密麻麻讓人頭大,且功能上無法滿足基本應用
UE編輯器
UE編輯器全稱UltraEdit,是一款多功能的編輯器,其能打開的文本文件多到我數不出來。對於一個網站開發者而言,UE編輯器顯示的效果以及功能上都要比記事本強很多,所以使用者還是挺多的。
UE編輯器功能實用,而且對jsp文件的一些代碼有功能性醒目標註顯示以及左邊的代碼行數標記,這對於開發者讀、編代碼而言無疑方便了很多。
優點:功能實用,支持眾多在網站開發過程中需要使用的各種格式文件
缺點:不是免費的(但網站能下載到各種綠色版、中文漢化破解版)
Dreamweaver網頁設計軟件
功能強大的專業網頁設計軟件,網頁設計三劍客之一。集網站開發過程中經常使用的多種功能於一身,對於打開jsp這類網站製作過程中常見的格式文件那是必備的底層功能,在功能上超過上面的UE編輯器。是專業、長期網站開發者必備軟件。
優點:功能強大、實用,適合長期的專業開發者使用
缺點:收費軟件,且對於本文「怎麼打開jsp文件」的標題而言,它太「浮腫」了。
上面介紹的這三款軟件對於的不同身份的使用者,可以更具自己的實際需求情況選擇適合自己的方法來處理你的jsp文件。
其實可以打開和編譯JSP文件的軟件還有許多,例如:emeditor,editplus等都是非常不錯的軟件。
原創文章,作者:XHVY,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/145912.html