>  기사  >  위챗 애플릿  >  WeChat 미니 프로그램에 백엔드 코드가 포함된 이미지 업로드

WeChat 미니 프로그램에 백엔드 코드가 포함된 이미지 업로드

php中世界最好的语言
php中世界最好的语言원래의
2018-05-31 14:13:423617검색

이번에는 WeChat 미니 프로그램에서 이미지를 업로드하기 위한 백엔드 코드를 가져오겠습니다. WeChat 미니 프로그램에서 이미지 업로드 시 주의사항은 무엇인가요?

물론 미니 프로그램에서도 사진을 업로드할 수 있으며 WeChat 미니 프로그램 문서도 매우 명확합니다.

사진 업로드

첫 번째 사진 선택

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)

을 사용하여 사진을 업로드해야 합니다

로컬 리소스 fileswx.uploadFile(OBJECT)을 통해 서버에 업로드할 수 있습니다. .

원칙은 클라이언트가 콘텐츠 유형이 multipart/form-data인 HTTPS POST 요청을 시작한다는 것입니다.

공식 샘플 코드

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
  }
 })
}

백엔드. code

Java로 작성했는데 처음에는 업로드된 이미지를 받기 위해 백엔드에서 여러 가지 문제가 발생했는데, 나중에는 순수 서블릿을 사용해서 저장하는데 문제가 없었습니다. 앞으로는 말썽.

참고: 코드는 회사 내부 프레임워크를 사용합니다. 사용하기 전에 수정하는 것이 좋습니다

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);
 }
}

이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 다른 관련 기사를 주목하세요. PHP 중국어 웹사이트에서!

추천 도서:

js의 세 가지 사용 사례(코드 포함)에 대한 자세한 설명

WeChat 애플릿을 사용하여 이미지를 업로드하는 방법

위 내용은 WeChat 미니 프로그램에 백엔드 코드가 포함된 이미지 업로드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.