这篇文章主要是记录一下在开发钉钉微应用时,实现图片上传及显示功能的过程。

这个项目用的dingyou-dingtalk-mobile这个脚手架,可直接在NowaGui上创建。这是一个关于钉钉微应用的脚手架,关于它的介绍以及更详细的内容,可以参考https://caohaijiang.github.io/2017/04/17/dingtalk-start/,对于刚入门使用react开发移动前端的同学还是很有帮助的。

该项目使用的前端UI是antd-mobile,其用户手册可以参看https://mobile.ant.design/docs/react/introduce-cn,里面提供了比较丰富的ui组件,基本上可以满足前端的开发。

转到重点,说一下其ImagePicker组件的实际应用。

前端的使用可以参考其用户手册,有比较详尽的实例说明,之前在开发时候也比较顺利的使用了这个组件,但是在将这个上传的图片,如何保存到后台服务器上,纠结了不少时间。网上看了不少相关文章,但是貌似都没什么帮助。

这边后端是通过springmvc来处理的,

    @CrossOrigin( maxAge = 3600)
@RequestMapping("/upload")
@ResponseBody
public String upload(HttpServletRequest request,@RequestParam("file") MultipartFile file) throws IOException

其中MultipartFIle file用来接收前端传过来的文件,前端应该如何传递过来,需要使用FormDate传递参数。如下

                  for(let key in this.state.files){

                        let formData = new FormData();
formData.append("file", this.state.files[key].file);
formData.append("dateId", dateId);
formData.append("flag", "1"); fetch(AUTH_URL + "ddoa/upload" , {
method: 'POST',
headers: {
},
body: formData,
}).then((response) => response.json())
.then((responseData)=> { console.log('uploadImage', responseData); Control.go("/leavedetail/"+dateId, ); }).catch((err)=> {
this.showToast();
const msg = response.msg;
Toast.info(msg, 2);
});
}

如上,获取file将其设置到file中,在后台即可接收到。后端通过

 FileUtils.copyInputStreamToFile(file.getInputStream(),new File(imagePath, imageName));

即可将文件上传到imagePath指定的目录中。完成图片的上传。此处需要将上传图片的相关的信息保存的至一张数据库表中,该表应该包括图片名称、图片实际路径、关联的主表Id等,根据业务进行拓展。

之后是将上传的图片在页面中显示了。

由于后端是springBoot项目,可以使用其提供的图片服务器来显示图片。可参考https://www.cnblogs.com/bestxyl/p/7403297.html来实现。

再需要后端写一个通过主键ID值获取相应图片名称的接口,搭配图片服务器即可显示出来了。

前端具体可如下实现

render() {

        const listForImage = (imagesList) => {
let images = [];
for(let i = 0; i < imagesList.length; i++) { let m = {url : AUTH_URL + 'images/' + imagesList[i].imageName,id : imagesList[i].id}; images.push( m );
} return images;
} const files = listForImage(this.state.imagesList) ; return (
<div>
<div style={{display: this.state.imagesList.length == 0 ? 'none' : ''}}>
<WhiteSpace size="lg" /> <Card>
<Card.Header
title={<span><font color="gray"> * </font>图片</span>}
/>
<Card.Body style={{width : '90%'}}>
<ImagePicker
files={files}
onImageClick={(index, fs) => console.log(index, fs)}
selectable={false}
multiple={false} />
</Card.Body> </Card>
</div>
   </div>
);
}
 componentDidMount() {

    fetch( AUTH_URL + "ddoa/getImages" , {
method: 'POST',
headers: {
},
body: formData,
}).then((response) => { if (response.ok) { return response.json();
}
}).then((json) => { const imagesList = json.images; this.setState({imagesList:imagesList}); }).catch((error) => {
console.error(error);
}); }

使用antd-mobile的ImagePicker组件实现图片的上传的更多相关文章

  1. yii2组件之多图上传插件FileInput的详细使用

    作者:白狼 出处:http://www.manks.top/yii2_multiply_images.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...

  2. ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结

    相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直 ...

  3. iOS实现视频和图片的上传

    关于iOS如何实现视频和图片的上传, 我们先理清下思路 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. 如何把视频存到缓存路径中? #5. 如何上传 ...

  4. [转]Kindeditor图片粘贴上传(chrome)

    原文地址:https://www.cnblogs.com/jsper/p/7608004.html 首先要赞一下kindeditor,一个十分强大的国产开源web-editor组件. kindedit ...

  5. Vue项目图片剪切上传——vue-cropper的使用

    最近自己在研究vue,然后做了一个小型的后台管理系统用来练手,开发过程中,想到了剪切图片上传用户头像的需求.上网百度了一番,发现好多用的都是vue-cropper.我也就用了,个人感觉还是挺好用的.现 ...

  6. 基于vue + axios + lrz.js 微信端图片压缩上传

    业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...

  7. common-fileupload组件实现java文件上传和下载

    简介:文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...

  8. 利用WebUploader进行图片批量上传,在页面显示后选择多张图片压缩至指定路径【java】

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  9. PHP 多图上传,图片批量上传插件,webuploader.js,百度文件上传插件

    PHP  多图上传,图片批量上传插件,webuploader.js,百度文件上传插件(案例教程) WebUploader作用:http://fex.baidu.com/webuploader/gett ...

随机推荐

  1. Vue内置的Component标签用于动态切换组件

    html <div id="app"> <component :is="cut"></component> <butt ...

  2. Yarn 的日志聚集功能配置使用

    需要  hadoop 的安装目录/etc/hadoop/yarn-site.xml 中进行配置 配置内容 <property> <name>yarn.log-aggregati ...

  3. 【sql server】索引详解

    索引可以理解为一种特殊的目录结构. sql server提供两种索引形式: 聚集索引和非聚集索引. 怎么理解这两种形式. 拿我们常用的字典举例来说, 一个字典好比数据库中的一个表.那么当我们想从字典中 ...

  4. DAG最小路径点覆盖

    Problem 给出一个有向无环图 (\(DAG\)),求出最少使用其中多少条互不相交的路径覆盖所有点. Solution 若有 \(n\) 个点,对于每个点 \(i\) ,我们将它拆成两个点 \(i ...

  5. dplyr-高效的数据变换与整理工具--转载

    1.背景简介 在数据分析工作中,经常需要对原始的数据集进行清洗.整理以及变换.常用的数据整理与变换工作主要包括:特定分析变量的选取.满足条件的数据记录的筛选.按某一个或几个变量排序.对原始变量进行加工 ...

  6. 烽火HG220G-U E00L2.03M2000光猫改桥接教程

    烽火HG220G-U E00L2.03M2000光猫改桥接教程 P.S. 此教程同样适用于HG221G/HG260G-U/HG261G.(2016.12) 随着北京联通从原有的ONU升级到HGU之后, ...

  7. bzoj 2243: [SDOI2011]染色 线段树区间合并+树链剖分

    2243: [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 7925  Solved: 2975[Submit][Status ...

  8. hdu 5676 ztr loves lucky numbers 打表+二分

    ztr loves lucky numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  9. PL/SQL Developer安装配置

    选择tool下的perferences 修改下面标记的内容即可

  10. php中if(\$a==\$b)和if(\$a=\$b)什么区别?

    <?php // if($a==$b)和if($a=$b)什么区别? $a = 1; $b = 1; if ($a == $b) { // 通过 echo '通过'.PHP_EOL; } if ...