传统form表单提交方式的文件上传与文件存储
引言
時隔一天,上一篇文章《文件存儲》剛一停筆,今天上午就解決了困擾我已久的文件上傳問題。
站在一個已實現(xiàn)功能的角度來重新看待這個文件上傳的業(yè)務(wù):編輯頁面選擇jar包,然后通過form表單提交,上傳到后臺程序,然后保存。
對于后端實現(xiàn)的更多細(xì)節(jié),可以參考我的另一篇技術(shù)分享《Java實現(xiàn)用戶頭像上傳》,里面較為詳細(xì)的分析了文件從瀏覽器傳輸?shù)椒?wù)器之后的一些處理規(guī)則,包括接收方式、磁盤存儲等。
文件上傳的入口
最簡單的瀏覽器上傳入口僅需要一個form標(biāo)簽:
<form action="http://localhost:8081/thingsparse/addorupdthingsparse" method="post" enctype="multipart/form-data"><input type="file" name="file" value="選擇jar包"/><input id="submit_form" type="submit" class="btn btn-success save" value="保存"/> </form>前端只是用了傳統(tǒng)的form表單上傳文件的方式,提交按鈕直接submit到后臺,而不需要多寫哪怕一丁點的額外js。
值得注意的是:每條form表單參數(shù)都需要有name屬性,以及form表單的enctype="multipart/form-data"。
文件的存儲
其實關(guān)鍵的代碼就是文件的接收,至于后面的存儲操作,基本上都是對IO流的操作。瀏覽《Java實現(xiàn)用戶頭像上傳》參考更多信息。
/*** 解析新建編輯* * @param String* newThingsParse是一個擁有ThingsParse類結(jié)構(gòu)的json字符串* @return*/@RequestMapping(value = "/addorupdthingsparse")public ModelAndView saveThingsParse(MultipartFile file, HttpServletRequest request) {String idStr = request.getParameter("thingsparse_id");ThingsParse thingParse = new ThingsParse();//將被存儲于mongodb的實例String filePath = "";// jar包的路徑if (!file.isEmpty()) {File temp = new File("");filePath = temp.getAbsolutePath() + "\\" + file.getOriginalFilename();BufferedOutputStream out;try {out = new BufferedOutputStream(new FileOutputStream(new File(filePath)));out.write(file.getBytes());out.flush();out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException ex) {ex.printStackTrace();}}logger.info("保存的jar包路徑是:" + filePath);//output:保存的jar包路徑是:D:\workspace\wxgz\json.jarthingParse.setJarPackage(filePath);thingParse.setAuthor(request.getParameter("author"));thingParse.setDirection(request.getParameter("direction"));thingParse.setEntranceClass(request.getParameter("entrance_class"));thingParse.setEntranceMethod(request.getParameter("entrance_method"));thingParse.setName(request.getParameter("thingsparse_name"));thingParse.setTestData(request.getParameter("test_data"));thingParse.setVersion(request.getParameter("version"));if (idStr == null || "".equals(idStr)) {// 新增// 獲取當(dāng)前系統(tǒng)時間Calendar now = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String nowStr = sdf.format(now.getTime());// 將物解析實例的創(chuàng)建時間賦值thingParse.setCreateTime(nowStr);// 存儲thingsParseRepository.save(thingParse);} else {// 編輯thingParse.set_id(new ObjectId(idStr));if(file.isEmpty()){thingParse.setJarPackage(request.getParameter("jar_package"));}thingParse.setCreateTime(request.getParameter("thingsparse_createtime"));thingsParseRepository.save(thingParse);}String listUrl = "redirect:http://localhost:8081/thingsparse/thingsparselist";return new ModelAndView(listUrl);//后臺重定向}總結(jié)
web應(yīng)用的文件上傳是一個相對通用的功能,使用最簡單的form表單提交基本可以滿足多數(shù)應(yīng)用的要求。
關(guān)鍵的思路就是前端的form表單選擇文件然后提交,后端使用類型MultipartFile 接收。而文件保存到本地磁盤可以參考《文件存儲》和《Java實現(xiàn)用戶頭像上傳》。
總結(jié)
以上是生活随笔為你收集整理的传统form表单提交方式的文件上传与文件存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux进阶之路————远程登录与vi
- 下一篇: 解决eclipse刚启动卡死的问题~~~