传统form表单提交方式的文件上传与文件存储
生活随笔
收集整理的這篇文章主要介紹了
传统form表单提交方式的文件上传与文件存储
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
引言
時隔一天,上一篇文章《文件存儲》剛一停筆,今天上午就解決了困擾我已久的文件上傳問題。
站在一個已實現功能的角度來重新看待這個文件上傳的業務:編輯頁面選擇jar包,然后通過form表單提交,上傳到后臺程序,然后保存。
對于后端實現的更多細節,可以參考我的另一篇技術分享《Java實現用戶頭像上傳》,里面較為詳細的分析了文件從瀏覽器傳輸到服務器之后的一些處理規則,包括接收方式、磁盤存儲等。
文件上傳的入口
最簡單的瀏覽器上傳入口僅需要一個form標簽:
<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>前端只是用了傳統的form表單上傳文件的方式,提交按鈕直接submit到后臺,而不需要多寫哪怕一丁點的額外js。
值得注意的是:每條form表單參數都需要有name屬性,以及form表單的enctype="multipart/form-data"。
文件的存儲
其實關鍵的代碼就是文件的接收,至于后面的存儲操作,基本上都是對IO流的操作。瀏覽《Java實現用戶頭像上傳》參考更多信息。
/*** 解析新建編輯* * @param String* newThingsParse是一個擁有ThingsParse類結構的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)) {// 新增// 獲取當前系統時間Calendar now = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String nowStr = sdf.format(now.getTime());// 將物解析實例的創建時間賦值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);//后臺重定向}總結
web應用的文件上傳是一個相對通用的功能,使用最簡單的form表單提交基本可以滿足多數應用的要求。
關鍵的思路就是前端的form表單選擇文件然后提交,后端使用類型MultipartFile 接收。而文件保存到本地磁盤可以參考《文件存儲》和《Java實現用戶頭像上傳》。
總結
以上是生活随笔為你收集整理的传统form表单提交方式的文件上传与文件存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux进阶之路————远程登录与vi
- 下一篇: php瀑布墙,phpwind Next增