今天在專案中要寫乙個上傳檔案的功能,使用jsp中的form表單的形式完成。
首先新建乙個jsp,使用最原始的form表單來完成。
jsp中的**如下,很簡單:
因為是要上傳檔案,所以form表單中的enctype屬性必須是
multipart/form-data
因為是post請求,所以method屬性是post,,
因為對應的servlet不在同乙個專案中,故必須加上文根。
後台servlet中直接獲取檔案的**如下:
1.首先servlet中的init函式中
@override
public void init() throws servletexception catch (malformedurlexception e)
webinfpath = temp + file.separator + "web-inf";
} system.out.println(webinfpath);
file webinffile = new file(webinfpath);
webrootpath = webinffile.getparentfile().getparentfile().getparentfile().getabsolutepath();
cachepath = webrootpath+file.separator+"ims_res"+file.separator+"caches";
}
使用init找到tomcat根目錄以及想要上傳到哪個資料夾下:
下面:
@override
}//構建乙個檔案上傳的路徑
//先把該上傳到tomcat 的ims_res\caches\fodderupload 目錄下
file uploadfile = new file(fodderuploadpath+"\\"+filename);
//返回檔案的大小,返回位元組數
long filelength = item.getsize();
//上傳檔案
item.write(uploadfile);
out.println("檔名為filename:"+filename);
out.println("檔案大小filelength:"+filelength);
}else}}
out.close();
} catch (exception e)
}
重寫dopost方法可以獲取上傳的檔案資訊。
獲取檔案的部分我就不再寫了。
這裡值得一提的是,我要在前台往後臺servlet中傳引數的時候,即就是在form表單中:
">
後台使用常規的辦法,可以使用 request.getparameter("schoolri") 的方式獲取引數,但是在這裡不行,為什麼呢?
原因是這裡form表單中 enctype屬性的值為:multipart/form-data 這樣的話,後台servlet 就不能使用 request.getparameter("schoolri") 獲取引數了。
查了很多資料,這有一篇部落格寫的很好,引用一下,在這裡也要感謝一下這個作者。
然而,在向伺服器傳送大量的文字、包含非ascii字元的文字或二進位制資料時這種編碼方式效率很低。
在檔案上載時,所使用的編碼型別應當是「multipart/form-data」,它既可以傳送文字資料,也支援二進位制資料上載。
browser端表單的enctype屬性值為multipart/form-data,它告訴我們傳輸的資料要用到多**傳輸 協議,由於多**傳輸的都是大量的資料,所以規定上傳檔案必須是post方法,的type屬性必須是file。
所以到最後 使用
在上述帶啊中: fileitem item = (fileitem) items.next();
使用item物件即可得到
for(fileitem i: items)
上傳附件的知識點寫的很亂,在這裡記錄一下,也為以後我自己複習找到能複習的地方。
不積跬步,無以至千里
不積小流,無以成江海
使用form表單上傳檔案
在使用form表單上傳檔案時候,input type file 是必然會用的,其中有一些小坑需要避免。1 form的 enctype multipart form data 已經是個老生常談的問題了,相信都能注意到,就不多說了。3 當使用input type file 的onchange事件來觸發檔...
form表單上傳檔案
views def up request return render request,up.html html 這時候隨便選擇乙個檔案傳送,結果當然是不成功的。錯誤資訊 csrf verification failed.request aborted.csrf驗證失敗。請求中止。不能發,現在要朝著後...
使用form表單向node上傳檔案
提交 form js 引入模組 const express require express const fs require fs const path require path const bodyparser require body parser express 監聽埠 listen 3000...