亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序上傳圖片功能(附后端代碼)

2020-03-21 16:17:16
字體:
來源:轉載
供稿:網友

幾乎每個程序都需要用到圖片,在小程序中我們可以通過image組件顯示圖片。

當然小程序也是可以上傳圖片的,微信小程序文檔也寫的很清楚。

上傳圖片

首先選擇圖片

通過wx.chooseImage(OBJECT)實現

微信小程序,上傳圖片,小程序開發

官方示例代碼

wx.chooseImage({ count: 1, // 默認9 sizeType: ['original', 'compressed'], // 可以指定是原圖還是壓縮圖,默認二者都有 sourceType: ['album', 'camera'], // 可以指定來源是相冊還是相機,默認二者都有 success: function (res) { // 返回選定照片的本地文件路徑列表,tempFilePath可以作為img標簽的src屬性顯示圖片 var tempFilePaths = res.tempFilePaths }})

圖片最多可以選擇9張, 也可以通過拍攝照片實現,當選擇完圖片之后會獲取到圖片路徑, 這個路徑在本次啟動期間有效。
如果需要保存就需要用wx.saveFile(OBJECT)

上傳圖片

通過wx.uploadFile(OBJECT) 可以將本地資源文件上傳到服務器。

原理就是客戶端發起一個 HTTPS POST 請求,其中 content-type為 multipart/form-data。

微信小程序,上傳圖片,小程序開發

官方示例代碼

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

示例代碼

看完了官方文檔, 寫一個上傳圖片就沒有那么麻煩了,下面是真實場景的代碼

import constant from '../../common/constant';Page({ data: { src: "../../image/photo.png", //綁定image組件的src  //略... }, onLoad: function (options) {  //略...  }, uploadPhoto() { var that = this;  wx.chooseImage({  count: 1, // 默認9  sizeType: ['compressed'], // 可以指定是原圖還是壓縮圖,默認二者都有  sourceType: ['album', 'camera'], // 可以指定來源是相冊還是相機,默認二者都有  success: function (res) {  // 返回選定照片的本地文件路徑列表,tempFilePath可以作為img標簽的src屬性顯示圖片  var tempFilePaths = res.tempFilePaths;  upload(that, tempFilePaths);  } }) }})function upload(page, path) { wx.showToast({ icon: "loading", title: "正在上傳" }), wx.uploadFile({  url: constant.SERVER_URL + "/FileUploadServlet",  filePath: path[0],   name: 'file',  header: { "Content-Type": "multipart/form-data" },  formData: {  //和服務器約定的token, 一般也可以放在header中  'session_token': wx.getStorageSync('session_token')  },  success: function (res) {  console.log(res);  if (res.statusCode != 200) {    wx.showModal({   title: '提示',   content: '上傳失敗',   showCancel: false   })   return;  }  var data = res.data  page.setData({ //上傳成功修改顯示頭像   src: path[0]  })  },  fail: function (e) {  console.log(e);  wx.showModal({   title: '提示',   content: '上傳失敗',   showCancel: false  })  },  complete: function () {  wx.hideToast(); //隱藏Toast  } })}

后端代碼

后端是用java寫的,一開始的時候,后端開始用了一些框架接收上傳的圖片,出現了各種問題,后來使用了純粹的Servlet就沒有了問題, 把代碼貼出來省的以后麻煩了。

注意: 代碼使用了公司內部的框架,建議修改后再使用

public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static Logger logger = LoggerFactory.getLogger(FileUploadServlet.class); public FileUploadServlet() {  super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  JsonMessage<Object> message = new JsonMessage<Object>();  EOSResponse eosResponse = null;  String sessionToken = null;  FileItem file = null;  InputStream in = null;  ByteArrayOutputStream swapStream1 = null;  try {   request.setCharacterEncoding("UTF-8");    //1、創建一個DiskFileItemFactory工廠    DiskFileItemFactory factory = new DiskFileItemFactory();    //2、創建一個文件上傳解析器    ServletFileUpload upload = new ServletFileUpload(factory);   //解決上傳文件名的中文亂碼    upload.setHeaderEncoding("UTF-8");    // 1. 得到 FileItem 的集合 items    List<FileItem> items = upload.parseRequest(request);   logger.info("items:{}", items.size());   // 2. 遍歷 items:    for (FileItem item : items) {     String name = item.getFieldName();     logger.info("fieldName:{}", name);    // 若是一個一般的表單域, 打印信息     if (item.isFormField()) {      String value = item.getString("utf-8");      if("session_token".equals(name)){      sessionToken = value;     }    }else {     if("file".equals(name)){      file = item;     }    }    }   //session校驗   if(StringUtils.isEmpty(sessionToken)){    message.setStatus(StatusCodeConstant.SESSION_TOKEN_TIME_OUT);    message.setErrorMsg(StatusCodeConstant.SESSION_TOKEN_TIME_OUT_MSG);   }   String userId = RedisUtils.hget(sessionToken,"userId");   logger.info("userId:{}", userId);   if(StringUtils.isEmpty(userId)){    message.setStatus(StatusCodeConstant.SESSION_TOKEN_TIME_OUT);    message.setErrorMsg(StatusCodeConstant.SESSION_TOKEN_TIME_OUT_MSG);   }   //上傳文件   if(file == null){   }else{    swapStream1 = new ByteArrayOutputStream();    in = file.getInputStream();    byte[] buff = new byte[1024];    int rc = 0;    while ((rc = in.read(buff)) > 0) {     swapStream1.write(buff, 0, rc);    }    Usr usr = new Usr();    usr.setObjectId(Integer.parseInt(userId));    final byte[] bytes = swapStream1.toByteArray();    eosResponse= ServerProxy.getSharedInstance().saveHeadPortrait(usr, new RequestOperation() {     @Override     public void addValueToRequest(EOSRequest request) {      request.addMedia("head_icon_media", new EOSMediaData(EOSMediaData.MEDIA_TYPE_IMAGE_JPEG, bytes));     }    });    // 請求成功的場合    if (eosResponse.getCode() == 0) {     message.setStatus(ConstantUnit.SUCCESS);    } else {     message.setStatus(String.valueOf(eosResponse.getCode()));    }   }  } catch (Exception e) {   e.printStackTrace();  } finally{   try {    if(swapStream1 != null){     swapStream1.close();    }   } catch (IOException e) {    e.printStackTrace();   }   try {    if(in != null){     in.close();    }   } catch (IOException e) {    e.printStackTrace();   }  }  PrintWriter out = response.getWriter();   out.write(JSONObject.toJSONString(message));  } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  doGet(request, response); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲日韩欧美视频一区| 全亚洲最色的网站在线观看| 亚洲老头老太hd| 亚洲人成网站免费播放| 久久久精品久久久久| 操人视频在线观看欧美| 日韩亚洲第一页| 91精品啪在线观看麻豆免费| 国内揄拍国内精品少妇国语| 青青青国产精品一区二区| 欧美另类精品xxxx孕妇| 亚洲国产女人aaa毛片在线| 久久99热这里只有精品国产| 亚洲天堂男人天堂女人天堂| 国自产精品手机在线观看视频| 亚洲精品之草原avav久久| 久久人人爽人人爽爽久久| 97色在线观看免费视频| 成人激情视频小说免费下载| 亚洲最新av网址| 日韩精品欧美国产精品忘忧草| 日本久久久久久久| 欧美成人手机在线| 久久久中文字幕| 欧洲亚洲女同hd| 国产精品永久免费观看| 亚洲免费成人av电影| 欧美精品videosex极品1| 日日骚久久av| 久久久精品国产一区二区| 欧美日韩国产成人在线| 国产成人精品视| 日韩视频永久免费观看| 91免费视频网站| 日韩在线视频线视频免费网站| 在线观看亚洲区| 国产在线高清精品| 国产精品视频色| 国产精品欧美一区二区| 欧美—级a级欧美特级ar全黄| 亚洲一区制服诱惑| 欧美专区国产专区| 色阁综合伊人av| 亚洲天堂免费在线| 日韩在线观看电影| 成人性生交大片免费看小说| 夜夜嗨av一区二区三区四区| 国产亚洲欧美另类中文| 国产suv精品一区二区| 国产精品视频久久| 亚洲欧美日韩中文在线制服| 成人免费网视频| 永久免费精品影视网站| 久久久久中文字幕2018| 中文字幕无线精品亚洲乱码一区| 亚洲人成在线观看| 欧美黑人性视频| 欧美精品www| 亚洲激情视频在线播放| 亚洲新声在线观看| 亚洲天堂av网| 国产精品视频不卡| 92看片淫黄大片欧美看国产片| 自拍偷拍亚洲一区| 日韩高清电影免费观看完整版| 国产亚洲精品久久久久久牛牛| 国产精品成人va在线观看| 欧美一级成年大片在线观看| 九九视频直播综合网| 国产午夜精品一区二区三区| 欧美大胆在线视频| 日韩亚洲欧美成人| 91视频国产精品| 亚洲自拍欧美色图| 色与欲影视天天看综合网| 色综合老司机第九色激情| 国产精品美女视频网站| 国产欧美精品日韩| 欧美极品少妇与黑人| 欧美大片在线看| 亚洲黄色www| 日韩午夜在线视频| 亚洲成色777777在线观看影院| 成人久久18免费网站图片| 日日摸夜夜添一区| 正在播放欧美视频| 亚洲美女性视频| 91av在线免费观看视频| 久久91超碰青草是什么| 欧美床上激情在线观看| 欧美日韩国产页| 国产精品白嫩美女在线观看| 国产做受高潮69| 日韩欧美在线国产| 精品国产乱码久久久久酒店| 国产精品欧美久久久| 日韩有码在线电影| www.xxxx精品| 亚洲成人av片| 中文字幕一区电影| 中文在线资源观看视频网站免费不卡| 日韩精品免费视频| 欧美激情2020午夜免费观看| 深夜福利91大全| 欧美成人免费va影院高清| 亚洲女同精品视频| 精品久久中文字幕久久av| 亚洲人成啪啪网站| 久久露脸国产精品| 91精品啪在线观看麻豆免费| 91av视频在线播放| 成人免费直播live| 国产精品国产自产拍高清av水多| 中文字幕久久亚洲| 亚洲精品影视在线观看| 精品国产91久久久久久| 国产成人精品a视频一区www| 中文字幕欧美日韩精品| 国产精品亚洲网站| www.国产精品一二区| 亲子乱一区二区三区电影| 成人h视频在线| 成人午夜在线视频一区| 欧美日韩在线免费| 精品视频偷偷看在线观看| 久久久久久久久久久亚洲| 国产精选久久久久久| 欧洲美女7788成人免费视频| 中文在线不卡视频| 国产激情久久久久| 国产精品第一页在线| 精品久久久久国产| 亚洲天堂一区二区三区| 97在线观看免费高清| 久久理论片午夜琪琪电影网| 久久最新资源网| 久久久av亚洲男天堂| 亚洲激情在线视频| 自拍亚洲一区欧美另类| 国产精品www网站| 日韩精品丝袜在线| 国产精品高潮呻吟久久av野狼| 国产一区二区成人| 亚洲午夜女主播在线直播| 久久久久久久成人| 2019中文字幕在线| 国产热re99久久6国产精品| 久久精品成人动漫| 国产精品96久久久久久| 亚洲自拍小视频| www.日韩av.com| 国产精品欧美日韩一区二区| 亚洲国产精品一区二区久| 91网在线免费观看| 欧美在线中文字幕| 亚洲91精品在线观看| 92版电视剧仙鹤神针在线观看| 久久人人爽人人爽爽久久| 国产成人在线视频| 国产乱肥老妇国产一区二| 欧美日韩国产综合视频在线观看中文| 日韩一区视频在线| 久久久精品国产网站| 亚洲国产精品国自产拍av秋霞|