java使用smortupload上傳和下載文件
smortupload
smortupload是一套上傳組件包,可以輕松實現(xiàn)上傳及下載功能,可以限制上傳文件的類型,也可以輕易得到文件的后綴名。smortupload是以jar包的形式給出的,再使用的時候要放到web的lib目錄下進行配置使用。由于要上傳文件,則必須對表單進行封裝,因為傳遞的不是普通的二進制文件。在from標簽里要使用enctype="multipart/form-data"轉(zhuǎn)成二進制的文件
<form action="/newbook" method="post" id="register" name="upload" enctype="multipart/form-data">
將表單提交到servlet后不能再時使用原先方法里面的請求和響應(yīng)對象,要初始化smortupload組件里的請求和響應(yīng)對象,首先創(chuàng)建smortupload對象
// 創(chuàng)建smortupload對象 SmartUpload su = new SmartUpload(); // 初始化請求和響應(yīng)對象 su.initialize(this.getServletConfig(),req,resp); // 創(chuàng)建一個新的請求對象 Request req1 = su.getRequest();
通過smortupload組件中的upload上傳
// 上傳過程 try { su.upload(); } catch (SmartUploadException e) { e.printStackTrace(); }
獲取到上傳的文件對象(注意這個對象所在的包)
Files fs = su.getFiles(); // 獲取第一個文件 File f = fs.getFile(0); // 獲取文件名稱 String fname = f.getFileName();
把上傳的文件保存到指定的位置,這里的路徑推薦是使用相對路徑
try { su.save("D:/Java/BookShop/web/img/bookpicture"); } catch (SmartUploadException e) { e.printStackTrace(); }
使用上面新創(chuàng)建的請求對象獲取到表單里面的參數(shù)
String bookname = req1.getParameter("bookname");
注意這里拿到的是一個二進制的數(shù)據(jù),所以我們在存入數(shù)據(jù)庫之前要進行轉(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è)置為通用的二進制流 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上傳和下載文件的詳細內(nèi)容,更多關(guān)于java smortupload上傳下載文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
@Transactional遇到try catch失效的問題
這篇文章主要介紹了@Transactional遇到try catch失效的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01FilenameUtils.getName?函數(shù)源碼分析
這篇文章主要為大家介紹了FilenameUtils.getName?函數(shù)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09Java項目之java+springboot+ssm實現(xiàn)理財管理系統(tǒng)設(shè)計
這篇文章主要介紹了Java項目java+springboot+ssm實現(xiàn)理財管理系統(tǒng)設(shè)計,使用了當前較為流行的spring boot,spring,spring mvc,mybatis,shiro框架分頁處理使用了pagehelper進行操作,需要的朋友可以參考一下2022-03-03