<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
1.1.1 引入Apache Commons FIleUpload元件依賴
<!--檔案上傳與下載相關的依賴--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.2</version> </dependency>
1.1.2 設定上傳檔案大小限制
在application.yml(根據個人情況,有的人可能用的properties)組態檔中新增如下引數:
1.1.3 建立控制器
後端部分很簡單,就是實現檔案上傳而已,這個學過SpringMVC就行。
@ApiOperation("檔案上傳") @PostMapping("/upload") public String upload(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws IOException { if(!file.isEmpty()){ //上傳檔案路徑 // String path = request.getServletContext().getRealPath("/uploadFiles/"); String path="E:/upload"; //獲得上傳檔名 String fileName = file.getOriginalFilename(); File filePath = new File(path + File.separator + fileName); System.out.println(filePath); //如果檔案目錄不存在,建立目錄 if(!filePath.getParentFile().exists()){ filePath.getParentFile().mkdirs(); } //將上傳檔案儲存到一個目標檔案中 file.transferTo(filePath); return "success"; } return "fail"; }
這裡為了方便,我直接使用了絕對路徑,生產環境中是不允許的。
wx.uploadFile(OBJECT)介面將本地資源上傳到開發者的伺服器上,使用者端發起一個HTTPS的Post請求,其中content-type為multipart/form-data。在上傳之前需要先獲取本地(手機)上的資源,即使用wx.uploadFile(OBJECT)之前應該先呼叫其他的介面來獲取待上傳的檔案資源,例如先呼叫wx.chooseImage()介面來獲取到本地圖片資源的臨時檔案路徑,再通過wx.uploadFile(OBJECT)介面將本地資源上傳到指定伺服器。wx.uploadFile()介面屬性如下表所示。
官網範例程式碼:
wx.chooseImage({ success (res) { const tempFilePaths = res.tempFilePaths wx.uploadFile({ url: 'https://example.weixin.qq.com/upload', //僅為範例,非真實的介面地址 filePath: tempFilePaths[0], name: 'file', formData: { 'user': 'test' }, success (res){ const data = res.data //do something } }) } })
真實的前端程式碼如下:
pages/uploadFile/uploadFile.wxml
<!--index.wxml--> <view class="container"> <button bindtap='upfile'>選擇上傳檔案</button> </view>
pages/uploadFile/uploadFile.js
//index.js //獲取應用範例 var app = getApp() Page({ data: { }, //事件處理常式 upfile: function() { console.log("--bindViewTap--") wx.chooseImage({ success: function(res) { var tempFilePaths = res.tempFilePaths wx.uploadFile({ url: 'http://127.0.0.1:8001/file/upload', header: { "Content-Type": "multipart/form-data" }, filePath: tempFilePaths[0], name: 'file', formData:{ }, success(res){ console.log(res.data); } }) } }) }, onLoad: function () { } })
編譯之後:
點選上傳檔案,隨便選擇一張圖片
可以看到,前端和後端專案的控制檯都有對應的輸出。
然後去對應的路徑下面查詢我們剛剛上傳的檔案
這裡依賴和設定上傳檔案大小和上傳部分一致,不重複了。
2.1.1 控制器
@ApiOperation("檔案下載") @GetMapping("download") public ResponseEntity<byte[]> download(HttpServletRequest request,@RequestParam("file") String fileName) throws IOException { //下載檔案路徑 String path="E:/upload"; //構建將要下載的檔案物件 File file = new File(path + File.separator + fileName); //設定響應頭 HttpHeaders headers=new HttpHeaders(); //下載顯示的檔名,解決中文名稱亂碼問題 String downloadFileName=new String(fileName.getBytes("UTF-8"),"ISO-8859-1"); //通知瀏覽器以下載方式(attachment)開啟檔案 headers.setContentDispositionFormData("attachment",downloadFileName); //定義以二進位制流資料(最常見的檔案下載)的形式下載返回檔案資料 headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); //使用spring mvc框架的ResponseEntity物件封裝返回下載資料 return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK); }
wx.downloadFile(Object object)下載檔案資源到本地(手機).使用者端直接發起一個HTTPS GET請求,返回檔案的本地臨時路徑。因為是臨時路徑,也就意味著使用者不會直到真實的檔案目錄,所以下載到臨時路徑之後應該馬上做後續的工作,例如把臨時圖片設定為頭像,或者把臨時檔案通過別的介面真是儲存到手機指定目錄下。wx.downloadFile(Object object)引數如表所示。
官網範例程式碼:
下載的前端程式碼如下:
這裡實現兩個功能,一個實現把下載到的圖片設定為頭像,另一個將圖片儲存到手機本地。
pages/downloadFile/downloadFile.wxml
<!--index.wxml--> <view class="container"> <view bindtap="dian" class="userinfo"> <image class="userinfo-avatar" src="{{avatar}}" background-size="cover"></image> <text class="userinfo-nickname">{{userInfo.nickName}}</text> </view> <view class="usermotto"> <image src='http://127.0.0.1:8001/file/download?file=ymwtyNjpeZq645b1d185a17eaa9a65398443fbc4f8dd.jpg' class="tu"></image> <view bindtap='dian2'>下載上圖</view> </view> </view>
pages/downloadFile/downloadFile.js
//index.js //獲取應用範例 var app = getApp() Page({ data: { motto: 'Hello World', userInfo: {}, avatar:null }, //事件處理常式 dian: function() { console.log("--bindViewTap--") var that = this; wx.downloadFile({ // url: 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=3018968254,2801372361&fm=26&gp=0.jpg', url:'http://127.0.0.1:8001/file/download?file=ymwtyNjpeZq645b1d185a17eaa9a65398443fbc4f8dd.jpg', type: 'image', success: function(res) { console.log(res) that.setData({avatar:res.tempFilePath}) } }) }, onLoad: function () { console.log('onLoad') var that = this //呼叫應用範例的方法獲取全域性資料 app.getUserInfo(function(userInfo){ //更新資料 that.setData({ userInfo:userInfo }) }) }, dian2: function () { wx.downloadFile({ url:'http://127.0.0.1:8001/file/download?file=ymwtyNjpeZq645b1d185a17eaa9a65398443fbc4f8dd.jpg', success: function (res) { console.log(res); var rr = res.tempFilePath; wx.saveImageToPhotosAlbum({ filePath: rr, success(res) { wx.showToast({ title: '儲存成功', icon: 'success', duration: 2000 }) } }) } }) } })
在函數dian()中呼叫了wx.downloadFile()介面,下載成功,圖片就會儲存在res.tempFilePath中,再把res.tempFilePath設定為頭像。在函數dian2中,通過wx.saveImageToPhotosAlbum()介面把下載成功的圖片儲存到系統相簿。
這個圖片是直接從伺服器上下載的,可以點選下載將這個圖片儲存到本地
到這裡,檔案上傳和下載就基本做完了。其實大多數都是後端的事情,介面寫好就沒啥大問題。不放心的可以先用swagger測試。
所有介面檔案均來自官網
以上就是SpringBoot+微信小程式實現檔案上傳與下載功能詳解的詳細內容,更多關於SpringBoot 小程式檔案上傳下載的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45