日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入讲解微信小程序上传图片与JAVA后台的结合

發布時間:2025/3/19 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入讲解微信小程序上传图片与JAVA后台的结合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

微信小程序上傳文件是微信小程序提供的API之一,如果用JAVA后臺如何來處理上傳的文件呢?

官方文檔

UploadTask?wx.uploadFile(Object object)

將本地資源上傳到服務器。客戶端發起一個 HTTPS POST 請求,其中?content-type?為?multipart/form-data。

參數

Object object

屬性類型默認值必填說明最低版本
urlstring?開發者服務器地址?
filePathstring?要上傳文件資源的路徑 (本地路徑)?
namestring?文件對應的 key,開發者在服務端可以通過這個 key 獲取文件的二進制內容?
headerObject?HTTP 請求 Header,Header 中不能設置 Referer?
formDataObject?HTTP 請求中其他額外的 form data?
timeoutnumber?超時時間,單位為毫秒2.10.0
successfunction?接口調用成功的回調函數?
failfunction?接口調用失敗的回調函數?
completefunction?接口調用結束的回調函數(調用成功、失敗都會執行)?

object.success 回調函數

參數

Object res

屬性類型說明
datastring開發者服務器返回的數據
statusCodenumber開發者服務器返回的 HTTP 狀態碼

創建小程序與編寫代碼?

創建小程序就不說了,如果不是開發小程序,也不會來搞上傳文件。上傳的關鍵代碼如下

wx.uploadFile({url: getApp().globalData.host + '/uploadImage',filePath: "/images/full_cart.png",name: 'img',success: (res) => {console.log("upload succeed")var data = res.data;console.log(data);}, fail: () => {console.log("upload failed")}})

對于以上代碼上傳文件的關鍵參數有三個。

第一個參數:url。這個參數是服務器的地址。本文中,我們的服務器是在本地的Tomcat,那就自然而然的是 localhost:8080,也可以直接寫成? url: 'http://localhost:8080/uploadImage' 。 uploadImage 表示的是Controller的地址,下面會講到。

按照上文的寫法是因為我在App.js里面做了全局配置,

globalData: {host: 'http://localhost:8080',}

第二個參數:filePath。這個參數是我要上傳的文件?

第三個參數 name,是為這個圖片對象設定的key。在Controller中用到。

JAVA后臺工程創建與編碼

JAVA后臺,也叫JAVA后端吧,總之就是服務器的意思。

這里面選擇的是Spring Boot 創建的Maven工程,在工程比中創建一個Controller,并編碼。代碼如下。

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile;import java.io.File; import java.io.IOException;/*** @author kangyucheng*/ @Controller public class UploadController {private final static Logger logger = LoggerFactory.getLogger(UploadController.class);@PostMapping("/uploadImage")@ResponseBodypublic String uploadImageFile(@RequestParam("img") MultipartFile uploadImage) throws IOException {String fileName = uploadImage.getOriginalFilename();String imgFilePath = "/Users/yuchk/Desktop/";File targetFile = new File(imgFilePath, fileName);//保存uploadImage.transferTo(targetFile);logger.info("圖片存儲成功");return "success";} }

需要注意的是

@PostMapping("/uploadImage") 要和微信小程序中的url參數中地址保持一致,
@RequestParam("img") 要和微信小程序中的name保持一致。

本地調試

本地調試的過程中首先要啟動Spring boot的工程。

然后編譯小程序,去觸發上傳的事件。

記得開啟不校驗合法域名。

本地調試結果?

真機調試?

?由于服務器是在本地開啟的,那么在真機無法訪問本地服務器的情況下,必然是會失敗的。

后臺錯誤的陷阱

假設我們的后臺發生了異常,那么微信小程序是沒法處理的。依然會當成上傳成功處理。

修改代碼

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile;import java.io.File; import java.io.IOException;/*** @author kangyucheng*/ @Controller public class UploadController {private final static Logger logger = LoggerFactory.getLogger(UploadController.class);@PostMapping("/uploadImage")@ResponseBodypublic String uploadImageFile(@RequestParam("img") MultipartFile uploadImage) throws Exception {String fileName = uploadImage.getOriginalFilename();String imgFilePath = "/Users/yuchk/Desktop/";File targetFile = new File(imgFilePath, fileName);//保存uploadImage.transferTo(targetFile);logger.info("圖片存儲成功");throw new Exception("故意的,哈哈");} }

?再次本地觸發文件上傳事件。

結論: 要根據不同的返回結果,來判定文件是否到底上傳成功。

其他需要注意的地方

如果忘記寫? @ResponseBody? 注解,那可能是這種情況,雖然圖片上傳成功,但是返回給微信小程序的就不是我們預設的內容了。

?

如果返回的是一個自定義的類,那么也會發生錯誤。

/*** @author kangyucheng*/ @Controller public class UploadController {private final static Logger logger = LoggerFactory.getLogger(UploadController.class);@PostMapping("/uploadImage")@ResponseBodypublic M uploadImageFile(@RequestParam("img") MultipartFile uploadImage) throws Exception {String fileName = uploadImage.getOriginalFilename();String imgFilePath = "/Users/yuchk/Desktop/";File targetFile = new File(imgFilePath, fileName);//保存uploadImage.transferTo(targetFile);logger.info("圖片存儲成功");return new M("a","b");} } class M{String a;String b;public M(String a,String b){this.a = a;this.b = b;} }

總結

以上是生活随笔為你收集整理的深入讲解微信小程序上传图片与JAVA后台的结合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。