最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot+微信小程序?qū)崿F(xiàn)文件上傳與下載功能詳解

 更新時(shí)間:2022年03月21日 11:41:04   作者:別團(tuán)等shy哥發(fā)育  
這篇文章主要為大家介紹了SpringBoot整合微信小程序?qū)崿F(xiàn)文件上傳與下載功能,文中的實(shí)現(xiàn)步驟講解詳細(xì),快跟隨小編一起學(xué)習(xí)一下吧

1、文件上傳

1.1 后端部分

1.1.1 引入Apache Commons FIleUpload組件依賴

<!--文件上傳與下載相關(guān)的依賴-->
<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 設(shè)置上傳文件大小限制

在application.yml(根據(jù)個(gè)人情況,有的人可能用的properties)配置文件中添加如下參數(shù):

1.1.3 創(chuàng)建控制器

后端部分很簡單,就是實(shí)現(xiàn)文件上傳而已,這個(gè)學(xué)過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);
            //如果文件目錄不存在,創(chuàng)建目錄
            if(!filePath.getParentFile().exists()){
                filePath.getParentFile().mkdirs();
            }
            //將上傳文件保存到一個(gè)目標(biāo)文件中
            file.transferTo(filePath);
            return "success";
        }
        return "fail";
    }

這里為了方便,我直接使用了絕對(duì)路徑,生產(chǎn)環(huán)境中是不允許的。

1.2 小程序前端部分

wx.uploadFile(OBJECT)接口將本地資源上傳到開發(fā)者的服務(wù)器上,客戶端發(fā)起一個(gè)HTTPS的Post請(qǐng)求,其中content-type為multipart/form-data。在上傳之前需要先獲取本地(手機(jī))上的資源,即使用wx.uploadFile(OBJECT)之前應(yīng)該先調(diào)用其他的接口來獲取待上傳的文件資源,例如先調(diào)用wx.chooseImage()接口來獲取到本地圖片資源的臨時(shí)文件路徑,再通過wx.uploadFile(OBJECT)接口將本地資源上傳到指定服務(wù)器。wx.uploadFile()接口屬性如下表所示。

官網(wǎng)示例代碼:

wx.chooseImage({
  success (res) {
    const tempFilePaths = res.tempFilePaths
    wx.uploadFile({
      url: 'https://example.weixin.qq.com/upload', //僅為示例,非真實(shí)的接口地址
      filePath: tempFilePaths[0],
      name: 'file',
      formData: {
        'user': 'test'
      },
      success (res){
        const data = res.data
        //do something
      }
    })
  }
})

真實(shí)的前端代碼如下:

pages/uploadFile/uploadFile.wxml

<!--index.wxml-->
<view class="container">
 <button bindtap='upfile'>選擇上傳文件</button>
</view>

pages/uploadFile/uploadFile.js

//index.js
//獲取應(yīng)用實(shí)例
var app = getApp()
Page({
  data: {
  },
  //事件處理函數(shù)
  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 () {
  }
})

1.3 實(shí)現(xiàn)效果

編譯之后:

點(diǎn)擊上傳文件,隨便選擇一張圖片

可以看到,前端和后端項(xiàng)目的控制臺(tái)都有對(duì)應(yīng)的輸出。

然后去對(duì)應(yīng)的路徑下面查找我們剛剛上傳的文件

2、文件下載

2.1 后端部分

這里依賴和設(shè)置上傳文件大小和上傳部分一致,不重復(fù)了。

2.1.1 控制器

 @ApiOperation("文件下載")
    @GetMapping("download")
    public ResponseEntity<byte[]> download(HttpServletRequest request,@RequestParam("file") String fileName) throws IOException {
        //下載文件路徑
        String path="E:/upload";
        //構(gòu)建將要下載的文件對(duì)象
        File file = new File(path + File.separator + fileName);
        //設(shè)置響應(yīng)頭
        HttpHeaders headers=new HttpHeaders();
        //下載顯示的文件名,解決中文名稱亂碼問題
        String downloadFileName=new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
        //通知瀏覽器以下載方式(attachment)打開文件
        headers.setContentDispositionFormData("attachment",downloadFileName);
        //定義以二進(jìn)制流數(shù)據(jù)(最常見的文件下載)的形式下載返回文件數(shù)據(jù)
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        //使用spring mvc框架的ResponseEntity對(duì)象封裝返回下載數(shù)據(jù)
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);
    }

2.2 小程序前端部分

wx.downloadFile(Object object)下載文件資源到本地(手機(jī)).客戶端直接發(fā)起一個(gè)HTTPS GET請(qǐng)求,返回文件的本地臨時(shí)路徑。因?yàn)槭桥R時(shí)路徑,也就意味著用戶不會(huì)直到真實(shí)的文件目錄,所以下載到臨時(shí)路徑之后應(yīng)該馬上做后續(xù)的工作,例如把臨時(shí)圖片設(shè)置為頭像,或者把臨時(shí)文件通過別的接口真是保存到手機(jī)指定目錄下。wx.downloadFile(Object object)參數(shù)如表所示。

官網(wǎng)示例代碼:

下載的前端代碼如下:

這里實(shí)現(xiàn)兩個(gè)功能,一個(gè)實(shí)現(xiàn)把下載到的圖片設(shè)置為頭像,另一個(gè)將圖片保存到手機(jī)本地。

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
//獲取應(yīng)用實(shí)例
var app = getApp()
Page({
 
  data: {
    motto: 'Hello World',
    userInfo: {},

    avatar:null
  },
  //事件處理函數(shù)
  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
    //調(diào)用應(yīng)用實(shí)例的方法獲取全局?jǐn)?shù)據(jù)
    app.getUserInfo(function(userInfo){
      //更新數(shù)據(jù)
      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
            })
          }
        })
      }
    })
  }

})

在函數(shù)dian()中調(diào)用了wx.downloadFile()接口,下載成功,圖片就會(huì)保存在res.tempFilePath中,再把res.tempFilePath設(shè)置為頭像。在函數(shù)dian2中,通過wx.saveImageToPhotosAlbum()接口把下載成功的圖片保存到系統(tǒng)相冊(cè)。

2.3 實(shí)現(xiàn)效果

這個(gè)圖片是直接從服務(wù)器上下載的,可以點(diǎn)擊下載將這個(gè)圖片保存到本地

到這里,文件上傳和下載就基本做完了。其實(shí)大多數(shù)都是后端的事情,接口寫好就沒啥大問題。不放心的可以先用swagger測(cè)試。

所有接口文檔均來自官網(wǎng)

以上就是SpringBoot+微信小程序?qū)崿F(xiàn)文件上傳與下載功能詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot 小程序文件上傳下載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Spring MVC如何測(cè)試Controller(使用springmvc mock測(cè)試)

    詳解Spring MVC如何測(cè)試Controller(使用springmvc mock測(cè)試)

    這篇文章主要介紹了詳解Spring MVC如何測(cè)試Controller(使用springmvc mock測(cè)試),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 詳解用maven將dubbo工程打成jar包運(yùn)行

    詳解用maven將dubbo工程打成jar包運(yùn)行

    這篇文章主要介紹了詳解用maven將dubbo工程打成jar包運(yùn)行,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java實(shí)現(xiàn)圖片轉(zhuǎn)base64完整代碼示例

    Java實(shí)現(xiàn)圖片轉(zhuǎn)base64完整代碼示例

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)圖片轉(zhuǎn)base64的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的方法,需要的朋友可以參考下
    2023-12-12
  • 淺析Java方法傳值和傳引用問題

    淺析Java方法傳值和傳引用問題

    這篇文章主要是對(duì)Java方法傳值和傳引用問題進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-12-12
  • 輕松掌握J(rèn)ava享元模式

    輕松掌握J(rèn)ava享元模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava享元模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 詳解Java編程中包package的內(nèi)容與包對(duì)象的規(guī)范

    詳解Java編程中包package的內(nèi)容與包對(duì)象的規(guī)范

    這篇文章主要介紹了Java編程中包package的內(nèi)容與包對(duì)象的規(guī)范,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-12-12
  • Spring Boot整合mybatis(一)實(shí)例代碼

    Spring Boot整合mybatis(一)實(shí)例代碼

    sprig-boot是一個(gè)微服務(wù)架構(gòu),加快了spring工程快速開發(fā),以及簡便了配置。接下來開始spring-boot與mybatis的整合
    2017-07-07
  • JSON,AJAX,Maven入門基礎(chǔ)

    JSON,AJAX,Maven入門基礎(chǔ)

    這篇文章主要介紹了JSON,AJAX和Maven基礎(chǔ),如何使用AJAX讀取Json數(shù)組里面的數(shù)據(jù),感興趣的小伙伴們可以參考一下,希望能夠幫助到你
    2021-07-07
  • java實(shí)現(xiàn)自定義日期選擇器的方法實(shí)例

    java實(shí)現(xiàn)自定義日期選擇器的方法實(shí)例

    日期選擇器是我們?nèi)粘i_發(fā)中經(jīng)常需要用到的一個(gè)功能,下面這篇文章主要給大家介紹了關(guān)于利用java實(shí)現(xiàn)自定義日期選擇器的相關(guān)資料,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Jax-rs規(guī)范下REST接口使用方法詳解

    Jax-rs規(guī)范下REST接口使用方法詳解

    這篇文章主要介紹了Jax-rs規(guī)范下REST接口使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論

沙田区| 阜康市| 淮阳县| 邳州市| 神木县| 诏安县| 武清区| 苍山县| 神池县| 南汇区| 鱼台县| 屏东市| 诸城市| 内丘县| 如皋市| 宁武县| 土默特左旗| 铜鼓县| 伊川县| 德保县| 郓城县| 奉节县| 大庆市| 五家渠市| 东辽县| 霍州市| 太仆寺旗| 平南县| 涿鹿县| 南投市| 迭部县| 会理县| 永兴县| 和林格尔县| 都匀市| 新田县| 林芝县| 永胜县| 蒙城县| 腾冲县| 乌拉特中旗|