java使用smortupload上傳和下載文件
smortupload
smortupload是一套上傳組件包,可以輕松實(shí)現(xiàn)上傳及下載功能,可以限制上傳文件的類型,也可以輕易得到文件的后綴名。smortupload是以jar包的形式給出的,再使用的時(shí)候要放到web的lib目錄下進(jìn)行配置使用。由于要上傳文件,則必須對(duì)表單進(jìn)行封裝,因?yàn)閭鬟f的不是普通的二進(jìn)制文件。在from標(biāo)簽里要使用enctype="multipart/form-data"轉(zhuǎn)成二進(jìn)制的文件
<form action="/newbook" method="post" id="register" name="upload" enctype="multipart/form-data">
將表單提交到servlet后不能再時(shí)使用原先方法里面的請(qǐng)求和響應(yīng)對(duì)象,要初始化smortupload組件里的請(qǐng)求和響應(yīng)對(duì)象,首先創(chuàng)建smortupload對(duì)象
// 創(chuàng)建smortupload對(duì)象
SmartUpload su = new SmartUpload();
// 初始化請(qǐng)求和響應(yīng)對(duì)象
su.initialize(this.getServletConfig(),req,resp);
// 創(chuàng)建一個(gè)新的請(qǐng)求對(duì)象
Request req1 = su.getRequest();通過smortupload組件中的upload上傳
// 上傳過程
try {
su.upload();
} catch (SmartUploadException e) {
e.printStackTrace();
}獲取到上傳的文件對(duì)象(注意這個(gè)對(duì)象所在的包)
Files fs = su.getFiles();
// 獲取第一個(gè)文件
File f = fs.getFile(0);
// 獲取文件名稱
String fname = f.getFileName();把上傳的文件保存到指定的位置,這里的路徑推薦是使用相對(duì)路徑
try {
su.save("D:/Java/BookShop/web/img/bookpicture");
} catch (SmartUploadException e) {
e.printStackTrace();
}使用上面新創(chuàng)建的請(qǐng)求對(duì)象獲取到表單里面的參數(shù)
String bookname = req1.getParameter("bookname");注意這里拿到的是一個(gè)二進(jìn)制的數(shù)據(jù),所以我們?cè)诖嫒霐?shù)據(jù)庫之前要進(jìn)行轉(zhuǎn)碼,使用utf-8的編碼格式
String bookname1 = new String(bookname.getBytes(),"utf-8");
然后連接數(shù)據(jù)庫就可以了。
文件的下載
// 獲取需要下載的文件名
String filename = req.getParameter("filename");
// 得到文件地址
String url = "/uploadfile/"+filename;
// 將響應(yīng)的內(nèi)容設(shè)置為通用的二進(jìn)制流
resp.setContentType("application/octet-stream");
// attachment 告訴瀏覽器以附件的方式下載文件(彈出下載框)
filename = URLEncoder.encode(filename,"utf-8");
resp.addHeader("Content-Disposition","attachment;filename="+filename);
// 發(fā)送
req.getRequestDispatcher(url).forward(req,resp);
// 清空緩存區(qū):將服務(wù)端緩存區(qū)的文件內(nèi)容,立即傳送給客戶端
resp.flushBuffer();到此smortupload的上傳和下載結(jié)束。
以上就是java使用smortupload上傳和下載文件的詳細(xì)內(nèi)容,更多關(guān)于java smortupload上傳下載文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
@Transactional遇到try catch失效的問題
這篇文章主要介紹了@Transactional遇到try catch失效的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java實(shí)現(xiàn)調(diào)用外部程序的示例代碼
本文主要介紹了Java實(shí)現(xiàn)調(diào)用外部程序的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
FilenameUtils.getName?函數(shù)源碼分析
這篇文章主要為大家介紹了FilenameUtils.getName?函數(shù)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Java項(xiàng)目之java+springboot+ssm實(shí)現(xiàn)理財(cái)管理系統(tǒng)設(shè)計(jì)
這篇文章主要介紹了Java項(xiàng)目java+springboot+ssm實(shí)現(xiàn)理財(cái)管理系統(tǒng)設(shè)計(jì),使用了當(dāng)前較為流行的spring boot,spring,spring mvc,mybatis,shiro框架分頁處理使用了pagehelper進(jìn)行操作,需要的朋友可以參考一下2022-03-03

