uniapp小程序上传文件webapi后端项目asp.net

需求

小程序需要上传用户相册图片或拍摄的照片到后端服务器

uniapp官方处理小程序文件方法

选择文件方法:uni.chooseMedia

uni-app官网uni-app,uniCloud,serverless,uni.chooseVideo(OBJECT),chooseVideo HarmonyOS 兼容性,uni.chooseMedia(OBJECT),uni.saveVideoToPhotosAlbum(OBJECT),saveVideoToPhicon-default.png?t=N7T8https://uniapp.dcloud.net.cn/api/media/video.html#choosemedia

上传文件方法:uni.uploadFile

uni.uploadFile(OBJECT) | uni-app官网uni-app,uniCloud,serverless,uni.uploadFile(OBJECT),uploadFile HarmonyOS 兼容性,参数 HarmonyOS 兼容性,返回值 HarmonyOS 兼容性,UploadTask 的方法,abort(),onProgressUpdateicon-default.png?t=N7T8https://uniapp.dcloud.net.cn/api/request/network-file.html#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-WEIXINuni.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) returnhandleUpload(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) returnhandleUpload(filePath, '手机图片')}})// #endif}const handleUpload = (filePath, name) => {let accessToken = 'Bearer ' + token.valuelet 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.picIditem.fileToken = data.data.picTokenitem.fileUse = props.fileUseemits('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);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件架构之计算机网络

软件架构之计算机网络 第 4 章 计算机网络4.1 网络架构与协议4.1.1 网络互联模型4.1.2 常见的网络协议4.1.3 IPv6 4.2 局域网与广域网4.2.2 无线局域网4.2.3 广域网技术4.2.4 网络接入技术 4.3 网络互连与常用设备4.4 网络工程4.4.1 网络规划4.4.2 网络设计4.4.3 网络实施 4.5 …

PTrade常见问题系列8

get_fundamentals函数能否在后台验证是否能取到数据 get_fundamentals函数能否在量化服务器后台调用&#xff0c;验证是否能取到财务数据&#xff1f; 可后台调用。 #获取财务数据 from fly.data.quotation import get_fundamentals get_fundamentals(600000.SS, balance_stat…

【ChatGPT 消费者偏好】第二弹:ChatGPT在日常生活中的使用—推文分享—2024-07-10

今天的推文主题还是【ChatGPT & 消费者偏好】 第一篇&#xff1a;哪些动机因素和技术特征的组合能够导致ChatGPT用户中高和低的持续使用意图。第二篇&#xff1a;用户对ChatGPT的互动性、性能期望、努力期望以及社会影响如何影响他们继续使用这些大型语言模型的意向&#x…

强烈推荐!!李沐老师《动手学深度学习》最新Pytorch版!

动手学深度学习(PyTorch版)》是由李沐、Aston Zhang和孔德威共同编写的教材&#xff0c;专为深度学习初学者和实践者设计。本书使用PyTorch作为主要的深度学习框架&#xff0c;全面系统地介绍了深度学习的基本理论、常见模型和实际应用技巧。 书中内容包括深度学习的基础知识、…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第二十二章 安装VMware Tool 工具

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【Linux】常用命令总结(updating)

1.date2.du&#xff08;disk use&#xff09;3.df&#xff08;disk free&#xff09;4.find shell命令可以使用man查看命令文档说明&#xff0c;说明界面中可通过b(backward)向上翻页&#xff0c;f(forward)向下翻页&#xff0c;g(go to)跳到说明首页&#xff0c;G跳到说明尾页…

el-upload 上传多个图片或多个文件,编辑,回显,删除操作

后端查询详情接口数据&#xff1a; [{"id": 91,"name": "Default","sort": 0,"fold": false,"deletable": false,"uniqueId": "machine_cabinet","infoList": [{"id": …

点晴模切ERP系统持续引领模切企业管理

数字化转型是制造企业迈向高质量发展的关键步骤,而升级优化企业管理平台,将企业数据信息有效利用、功能模块优化调整、流程架构科学规划,则是数字化转型的核心要素。 当今时代的模切ERP领域竞争者众多&#xff0c;为什么点晴模切ERP能从中脱颖而出&#xff1f;为什么那么多模切…

盘一盘3DGS对哪些行业影响最大?

在日新月异的科技时代&#xff0c;每一个新兴技术的诞生都像是宇宙中的新星&#xff0c;以其独特的光芒照亮并改变着世界。3DGS正是这样一项技术&#xff0c;它的出现无疑对传统3D视觉产生了巨大的冲击&#xff0c;也给各行各业带来了巨大的影响。作为CV界的新晋黑马&#xff0…

Deepspeed : AttributeError: ‘DummyOptim‘ object has no attribute ‘step‘

题意&#xff1a;尝试在一个名为 DummyOptim 的对象上调用 .step() 方法&#xff0c;但是这个对象并没有定义这个方法 问题背景&#xff1a; I want to use deepspeed for training LLMs along with Huggingface Trainer. But when I use deepspeed along with trainer I get …

红酒的甜蜜秘密:如何搭配甜点?

在品味美食的旅程中&#xff0c;甜点与红酒的搭配总是能带来意想不到的惊喜。红酒的醇厚与甜点的细腻&#xff0c;在口中交织出美妙的旋律&#xff0c;让人陶醉不已。今天&#xff0c;就让我们一起探索红酒的甜蜜秘密&#xff0c;看看如何与甜点很好搭配&#xff0c;享受这一场…

DLP迎来新机遇 | 天空卫士数据防泄漏防护市场占有率连续三年第一

IDC 于近日发布了《中国数据泄露防护市场份额&#xff0c;2023&#xff1a;DLP迎来新机遇》&#xff08;Doc#CHC50973524 &#xff0c;2024年6月&#xff09;报告&#xff0c;天空卫士DLP产品以21.9%的市场份额再次位列中国数据防泄露防护市场第一。这一成绩体现了天空卫士在技…

软件供应链安全:如何防范潜在的攻击?

来源&#xff1a;https://thehackernews.com/2024/06/practical-guidance-for-securing-your.html 软件生产组织面临越来越大的监管和法律压力&#xff0c;要求其保护供应链并确保软件的完整性&#xff0c;这不足为奇。在过去几年里&#xff0c;软件供应链已经成为攻击者越来越…

odoo 自定义菜单模型等进行报表输出

由于个性化需求,要定义不同报表不同条件搜索, 所以自定义有如下: 模型字段权限菜单功能如下: 启用:创建新菜单、form视图、action动作 前提:模型已经创建好, 禁用:对菜单进行归档处理 删除数据:如若正在使用,请先禁用报表 另附资料 全部代码如下: class IframeMana…

【C++】类中的六个默认成员函数(构造函数、析构函数、拷贝构造函数、复制重载函数等)

类中的六个默认成员函数 默认成员函数为了解决C语言存在的一些问题而诞生&#xff0c;默认存在于类中&#xff0c;进行某种操作时会自动调用默认成员函数&#xff0c;如想在此种操作中自动实现某种操作&#xff0c;可以手动定义此默认成员函数&#xff0c;如果手动定义则取代默…

kafka与zookeeper的SSL认证教程

作者 乐维社区&#xff08;forum.lwops.cn&#xff09;许远 在构建现代的分布式系统时&#xff0c;确保数据传输的安全性至关重要。Apache Kafka 和 Zookeeper 作为流行的分布式消息队列和协调服务&#xff0c;提供了SSL&#xff08;Secure Sockets Layer&#xff09;认证机制&…

汇凯金业:如何判断黄金的买入时机

黄金&#xff0c;作为全球公认的避险资产&#xff0c;其价格波动受到多种因素的影响&#xff0c;包括经济数据、货币政策、地缘政治风险等。对于投资者而言&#xff0c;把握黄金的最佳买入点是实现投资收益最大化的关键。本文将探讨影响黄金价格的主要因素&#xff0c;并提供一…

八大排序之——计数排序全方位剖析!(小白也能轻松看懂!)

目录 1. 计数排序的思想动图 2. 从思想到代码的实现 >1.创建临时数组 >2.统计次数 >3.排序 >4.简单版本 3. 是否可以优化呢~ 4. 计数排序的时空复杂度 5.总结 计数排序的优点 计数排序的局限性 6、完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来…

【腾讯云业务运营暑期实习面试题】

题目&#xff1a; &#xff08;全程大概50来分钟左右&#xff0c;面试官挺好的&#xff0c;不清楚的问题也在一直引导我&#xff0c;总体来说非常好&#xff0c;挺喜欢这个面试官的&#xff09; 1、自我介绍 2、讲讲文件的权限以及把目录下所有文件都修改 文件的权限 rwx --&…

动态规划(DFS -> 记忆化搜索 ->动态规划)

问题一&#xff1a; 首先看一个最经典的问题&#xff1a;上台阶问题。P1255 数楼梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 我们首先看一下&#xff0c;如何用DFS的方法进行解题。 假设我们要上到第5级台阶&#xff1a; 可以看出上到第五级台阶时&#xff0c;可能是…