uniapp小程序上传文件webapi后端项目asp.net完整代码
作者:woflyoycm
在uniapp中,实现文件上传功能也变得非常简单,下面这篇文章主要给大家介绍了关于uniapp小程序上传文件webapi后端项目asp.net的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
需求
小程序需要上传用户相册图片或拍摄的照片到后端服务器
uniapp官方处理小程序文件方法
选择文件方法:uni.chooseMedia
上传文件方法:uni.uploadFile
前端代码
前端项目为vue3类型的uniapp小程序项目
这里封装一个简单的插件来处理图片的选择和上传
<template> <view class="flex align-start flex-wrap padding-bottom"> <view class="flex flex-direction align-center justify-between margin-left-lg margin-top" v-for="(item,index) in innerFileList" :key="index"> <image class="cu-avatar xl radius" mode="scaleToFill" :src="item.fileUrl" @tap="previewImg(item)"></image> <text class='text-second' @tap="handleDelete(item)">删除图片</text> </view> <view class="cu-avatar xl radius margin-left-lg margin-top" @tap="handleChoose"> <text class="cuIcon-pic"></text> </view> </view> </template> <script setup> import { ref, computed, reactive, onMounted, watch } from 'vue' import { useStore } from 'vuex' import { toastError, toastMessage } from '@/util/common.js' const props = defineProps({ fileList: Array, fileUse: Number, limit: { type: Number, default: 5 } }) const store = useStore() const emits = defineEmits(['updateFile']) const token = computed(() => store.state.token) const innerFileList = ref([]) onMounted(() => { getFileList() }) watch(() => props.fileList, (n, o) => { if (!n || !n.length) { innerFileList.value = [] } else if (!innerFileList.value.length) { getFileList() } else { if (n.length !== innerFileList.value.length) { getFileList() } } }) const getFileList = () => { innerFileList.value = [] if (props.fileList && props.fileList.length) { for (let item of props.fileList) { item.fileUrl = getFileUrl(item.fileToken) } innerFileList.value = props.fileList } } const { getFileUrl } = useGetFileUrl() // 删除文件 const handleDelete = item => { uni.showModal({ title: '确定删除吗?', content: '确定删除该图片吗', success: res => { if (res.confirm) { let index = innerFileList.value.findIndex(x => x.fileUrl === item.fileUrl) innerFileList.value.splice(index, 1) } } }) } // 选择文件 const handleChoose = () => { if (innerFileList.value.length >= props.limit) { toastError('不能超过' + props.limit + '张') return } // #ifdef MP-WEIXIN uni.chooseMedia({ count: 1, mediaType: ['image'], fail: error => { console.log('图片选择失败', error) }, success: res => { let file = res.tempFiles[0] innerFileList.value.push({ id: 0, fileUrl: file.tempFilePath }) if (!file) return handleUpload(file.tempFilePath, '手机图片') } }) // #endif // #ifdef APP uni.chooseImage({ count: 1, fail: error => { console.log('图片选择失败', error) }, success: res => { let filePath = res.tempFilePaths[0] innerFileList.value.push({ id: 0, fileUrl: filePath }) if (!filePath) return handleUpload(filePath, '手机图片') } }) // #endif } const handleUpload = (filePath, name) => { let accessToken = 'Bearer ' + token.value let uploadUrl = '我的服务器url' uni.uploadFile({ url: uploadUrl, filePath: filePath, name: name, header: { Authorization: accessToken, }, fail: error => { console.log('图片上传失败', error) toastError('图片上传失败') }, success: uploadRes => { console.log('图片上传成功', uploadRes) if (uploadRes.statusCode === 200) { let data = JSON.parse(uploadRes.data) if (data.data) { let item = innerFileList.value[innerFileList.value.length - 1] item.fileId = data.data.picId item.fileToken = data.data.picToken item.fileUse = props.fileUse emits('updateFile', innerFileList.value) } } } }) } // 预览 const previewImg = item => { let urls = [item.fileUrl] uni.previewImage({ urls: urls }) } </script> <style> </style>
后端代码
后端项目为asp.net6的webapi项目
注意入参为IFormCollection formCollection 和web项目的IFormFile file入参有所区别
[HttpPost("upload_app_sales_order_cert")] [Authorize] public async Task<CommonResponse<UploadFileRes>> UploadSalesOrderCertApp(IFormCollection formCollection) { var user = GetUser(); FormFileCollection formFiles = (FormFileCollection)formCollection.Files; var file = formFiles[0]; //这里换成自己的业务逻辑 var res = await _uploadDataService.UploadFileAsync(file, user.UserId, user.DealerId, FileUse.销售单凭证); return new CommonResponse<UploadFileRes>(res); }
总结
到此这篇关于uniapp小程序上传文件webapi后端项目asp.net的文章就介绍到这了,更多相关uniapp小程序上传文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!