当前位置:   article > 正文

uniapp图片上传说明_uniapp 上传附件

uniapp 上传附件

目录

1.文件上传组件

2.单文件上传

3.多文件上传

4.图片的回显

5.注意点


1.文件上传组件

前端上传组件使用uni-file-picker,可以自行进行下载使用。默认上传到绑定的服务空间,配置属性auto-upload为false关闭自动上传,可以限定上传的是图片还是文件,具体的可以参照官方文档。总共有5个事件,如果不使用自动上传,只需要select事件和delete事件即可,select事件获取选择的图片信息,可以配置选择一个或者多个。delete事件获取删除的图片信息。图片的上传示例如下:

  1. <uni-forms-item label="现场照片" class="uni-form-item">
  2. <uni-file-picker ref="filePicker" v-model="fileInfo" file-mediatype="image" mode="grid"
  3. file-extname="png,jpg" :limit="6" @select="select" @delete="deleteFile" return-type="array"
  4. :auto-upload="false" />
  5. </uni-forms-item>
  1. const select = async (e : any) => {
  2. e.tempFiles.forEach((item : any) => {
  3. fileInfo.value.push({
  4. name: item.name,
  5. extname: item.extname,
  6. url: item.url,
  7. fileType: item.fileType,
  8. image: item.image,
  9. path: item.path,
  10. size: item.size,
  11. uuid: item.uuid,
  12. status: item.status,
  13. cloudPath: item.cloudPath
  14. });
  15. })
  16. }
  17. const deleteFile = async (e : any) => {
  18. const num = fileInfo.value.findIndex((item : any) => item.url == e.tempFilePath)
  19. fileInfo.value.splice(num, 1);
  20. // 删除本地存储的图片
  21. uni.removeSavedFile({
  22. filePath:e.tempFilePath,
  23. })
  24. }

select方法将获取选择的图片信息,存储到fileInfo数组中;delete方法,获取要删除的图片信息,然后将存储在fileInfo数组中的图片删除。

2.单文件上传

官方文档:uni.uploadFile(OBJECT) | uni-app官网

使用uni.uploadFile方法进行文件上传。 

前端:

  1. uni.uploadFile({
  2. url: 'http://10.1.36.39:8098/xxxx/file/upload',
  3. header: {
  4. 'Content-Type': 'multipart/form-data',
  5. },
  6. filePath: '_doc/uniapp_save/17024591291590.png',
  7. name: 'file',
  8. formData: {
  9. userId: '123'
  10. },
  11. success: function (res) {
  12. console.log('上传成功')
  13. },
  14. fail: function (err) {
  15. console.log('上传失败', JSON.stringify(err));
  16. }
  17. })

 后端:

  1. @ApiOperation(value = "上传文件数据接口")
  2. @PostMapping(value = "/upload")
  3. public String upload(@RequestPart(value = "file") MultipartFile file) {
  4. RtnBean rtnBean = sftpService.uploadFile(file);
  5. }

单文件上传,filePath和name必须填写。filePath是要上传文件的路径,name属性的内容和后端接口中的参数名一致。

后端可以通过@RequestParam(value = "userId") String userId,来接收formData中的内容。

3.多文件上传

前端

  1. uni.uploadFile({
  2. url: 'http://10.1.36.39:8098/xxxx/file/upload',
  3. header: {
  4. 'Content-Type': 'multipart/form-data',
  5. },
  6. files: [{ name: '123', uri: '_doc/uniapp_save/17024591291590.png' }, { name: '123', 'uri': '_doc/uniapp_save/17024591291601.png' }],
  7. formData: {
  8. userId: '123'
  9. },
  10. success: function (res) {
  11. console.log('上传成功')
  12. },
  13. fail: function (err) {
  14. console.log('上传失败', JSON.stringify(err));
  15. }
  16. })

后端:

  1. @ApiOperation(value = "上传文件数据接口")
  2. @PostMapping(value = "/upload")
  3. public String upload(HttpServletRequest request) {
  4. CommonsMultipartResolver commonsMultipartResolve = new CommonsMultipartResolver(request.getSession().getServletContext());
  5. commonsMultipartResolve.setDefaultEncoding("utf-8");
  6. if(commonsMultipartResolve.isMultipart(request)){
  7. MultipartHttpServletRequest mulReq = (MultipartHttpServletRequest) request;
  8. Map<String, MultipartFile> map = mulReq.getFileMap();
  9. List<MultipartFile> resultList = new ArrayList<>();
  10. if(!map.isEmpty()){
  11. for (Map.Entry<String, MultipartFile> result : map.entrySet()) {
  12. resultList.add(result.getValue());
  13. }
  14. System.out.println(resultList.size());
  15. }
  16. }
  17. }

 多文件上传要使用files设置文件的信息。files的格式如下:

注意上传多个文件时,uri是文件路径,必须设置。name是文件的名字,上传多个文件时,名字必须设置,并且不能重复,如果存在3重复名字的文件,后端只能获取到一个。 

后端直接从request中获取前端传递的文件信息,也可以通过@RequestParam(value = "userId") String userId,来接收formData中的内容。

4.图片的回显

图片上传之后,不管是保存在本地或者时文件服务器上,需要在列表页进行数据的查看和修改,就涉及到图片的显示。

要进行图片的回显,需要设置uni-file-picker组件中的v-model绑定的值,绑定的值的格式是一个对象数组。结构如下:

需要设置图片的url地址,名称及后缀。未上传的文件,设置图片执行保存房后返回的地址,已经上传至服务器的图片,设置服务器中的文件地址(文件服务器使用nginx进行代理)。

示例:

  1. formData.value = response.resBody;
  2. if (response.resBody.fileList) {
  3. for (const item of response.resBody.fileList) {
  4. fileInfo.value = [...fileInfo.value, {
  5. name: item.fileNm,
  6. extname: item.fileSuffix,
  7. url: item.fileLoca
  8. }]
  9. }
  10. }

5.注意点

①保存图片信息时需要调用图片保存的方法,将图片存储起来。因为选择之后返回的是图片的临时路径,一旦app关闭,如果图片没有上传到服务器的话,会导致之前上传的图片无法显示,临时文件的生命周期是在app运行时生效,关闭则失效。存储方法如下:

  1. uni.saveFile({
  2. tempFilePath: item.url,
  3. success: (res) => {
  4. item.url = res.savedFilePath
  5. resolve(item)
  6. },
  7. fail: () => {
  8. reject()
  9. }
  10. })
  11. // 传入临时文件路径,返回保存的路径

②文件上传到服务器后,需要调用删除方法,将上面保存的文件或图片删除掉。避免一致占用手机的存储空间。

  1. // 删除本地存储的图片
  2. uni.removeSavedFile({
  3. filePath:e.tempFilePath,
  4. })

③注意单文件上传和多文件上传时属性的设置。

④注意单文件上传和多文件上传时后端的文件接收方式及formData中的参数接收方式。

参照:

uniapp多文件上传 uni.uploadFile() 前端+后端代码 - 简书

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/183481
推荐阅读
  

闽ICP备14008679号