【文件管理】关于上传下载文件的设计

这里主要谈论的是产品设计里面的文件管理,比如文件的上传交互及背后影响到的前后端设计。

上传文件

场景:一条记录,比如个人信息,有姓名,出生年月,性别等一般的字段,还可以允许用户上传附件作为补充,比如上传个人的学历证明等。

版本一

【平台】-【基金管理】-【产品信息】旧页面(现已废弃)

后端

用户上传文件,会将文件存在一个路径下。

前端

这里的交互设计其实和后端的做法没有什么关联。就是设计的不合理。

交互设计

新建弹窗分多步完成。

  1. 点击新增,第一步只允许编辑一般字段,点击下一步之后,先调用一次 Create 接口,后端返回该新增记录的ID;
  2. 第二步,允许用户上传附件,并且不用用户点击确定按钮就已经调用了上传接口。删除附件也是立即调用删除附件的接口。
  3. 点击确定,更新附件的信息到该记录的附件字段。

导致的问题:所有的用户下的附件不能重名。

优点: -

缺点:用户交互麻烦,如果在上传附件的时候,想要放弃该条数据,就要关闭弹窗再去删除这条数据。(或者在第二步的弹窗中有取消按钮,点击取消就去删除第一步跳转过来时候 create 接口新增的数据)

版本二

【平台】-【基金管理】-【产品信息(新)】

后端

在版本一的基础上,会在文件名前生成一个uuid,存到路径中。
并根据文件内容生成一个md5信息,在调用上传文件的接口后,会将文件的这些信息返回。

前端

交互设计

新建弹窗中,附件也和其他字段一样管理。在点击“确定”之后,attachments字段数组存放的是上传文件接口返回的文件信息,将这个字段和其他字段一起在调用 create 接口的时候作为 payload 传下去。

缺点:文件会越来越多,一直是增量的,即使在记录中删除了附件,也没有在数据(文件路径下)中真正的删除。

采用理由:在产品信息新页面中,是需要记录修改历史记录的,没有物理删除。所以该方案合理。

版本三

【平台】-【OA】-【表单设计】-【上传组件】

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

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

相关文章

Java 小项目开发日记 04(文章接口的开发、oss图片上传)

Java 小项目开发日记 04&#xff08;文章接口的开发、oss图片上传&#xff09; 项目目录 配置文件&#xff08;pom.xml&#xff09; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

机器学习:集成学习(Python)

一、Adaboost算法 1.1 Adaboost分类算法 adaboost_discrete_c.py import numpy as np import copy from ch4.decision_tree_C import DecisionTreeClassifierclass AdaBoostClassifier:"""adaboost分类算法&#xff1a;既可以做二分类、也可以做多分类&#…

python常用pandas函数nlargest 和 nsmallest及其手动实现

pandas是Python数据分析的重要工具之一&#xff0c;提供了大量便捷的数据操作方法。nlargest和nsmallest是pandas中两个非常实用的函数&#xff0c;它们可以帮助我们快速找出Series或DataFrame中最大或最小的n个值。 ### pandas中的nlargest和nsmallest函数 - nlargest(n, colu…

掌握Go语言:深入探究Go语言中的命令源码文件与参数处理技巧(3)

在Go语言学习的路上&#xff0c;掌握命令源码文件与参数处理技巧是至关重要的。本文将深入探讨命令源码文件的概念、作用以及参数处理的方法&#xff0c;同时结合进销存项目&#xff0c;展示实际应用与代码示例。 命令源码文件的概述 命令源码文件是Go语言程序的运行入口&…

uniapp的h5端在线预览文件

步骤如下&#xff1a; 1、下载需要准备的工具文件包 2、将其解压到/static/pdf文件夹下,如图&#xff1a; 3、创建在线查看文件的页面&#xff1a; <template><view><web-view :src"path"></web-view></view> </template>&l…

linux检测和重启python脚本

#!/bin/bash# 检测Flask应用是否挂了 if ! pgrep -f "flask_app.py" >/dev/null; then# 重启Flask应用cd /path/to/your/flask/appnohup python3 flask_app.py >/dev/null 2>&1 & fi这是一个简单的bash脚本&#xff0c;用于检测Flask应用是否挂掉&a…

JavaScript练手小技巧:一文看懂<script>标签的 ansyc 和 defer

<script>标签的 ansyc 和 defer 属性。只对外部加载 JS 文件有效。 <script src"js/app.js" async></script> <script src"js/app.js" defer></script> 普通加载 js&#xff08;同步加载&#xff09;&#xff1a;会打断 …

ES7、ES8、ES9、ES10、ES11、ES12 新特性汇总合集

在过去几年里&#xff0c;ECMAScript 标准不断更新&#xff0c;引入了许多令人激动的功能和改进。让我们来看看从 ES7 到 ES12 各个版本带来的重要变化&#xff1a; 1. ES7&#xff08;ECMAScript 2016&#xff09; 1. Array.prototype.includes 方法 Array.prototype.includ…

【字符串左旋右旋不会做?快来看看这篇“弹幕滚动”,你就有思路了!】

前言 不知道大家在做题时有没有遇到过“字符串旋转”的题目&#xff0c;很多人可能没有思路&#xff0c;这里我不具体讲解单一的题目&#xff0c;而是展现一个“弹幕滚动”的示例&#xff0c;相信大家看懂后就能做出“字符串旋转”的题了&#xff01; 技术名词解释 1.什么是“…

关于决策树模型

决策树模型是一种常用的数据挖掘方法&#xff0c;它通过模拟人类决策过程来对数据进行分类或回归分析。决策树由节点和边组成&#xff0c;其中每个内部节点代表一个属性上的测试&#xff0c;每个分支代表测试的一个结果&#xff0c;而每个叶节点&#xff08;树的末端&#xff0…

Vue3 isProxy,isReactive,isReadonly 三者解析

1、isProxy 作用&#xff1a;判断当前数据是否为代理数据。 注意&#xff1a;它只对通过 reactive&#xff0c;readonly&#xff0c;shallowReactive&#xff0c;shallowReadonly 这四个方法包裹的数据返回true&#xff0c;对于 ref 以及通过 new Proxy 代理的数据返回都是fal…

ChatGPT科研与AI绘图及论文高效写作教程

原文链接&#xff1a;ChatGPT科研与AI绘图及论文高效写作教程 2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电…

HPE ProLiant MicroServer Gen8更换坏硬盘(RAID 1+0)

HPE ProLiant MicroServer Gen8今天硬盘告警&#xff0c;坏了一块硬盘&#xff08;估计还是由于上次突然断电导致的&#xff09;&#xff0c;关机&#xff0c;拆下坏硬盘&#xff0c;更换新硬盘&#xff0c;开机后按了一次F1键&#xff0c;系统继续启动并正常使用&#xff0c;同…

高性能MySQL 第4版

第一章MySQL架构 MySQL提供了多种锁的颗粒度&#xff0c;每种MySQL存储引擎都可以实现自己的锁策略和锁力度。 行级锁是在存储引擎而不是在服务器中实现的。 隔离界别 READ UNCOMMITTED - 脏读 在事务中可以可以查看到其他事务中还没有提交的修改。实际中很少用。 READ C…

Linux网络编程——socket 通信基础

Linux网络编程——socket 通信基础 1. socket 介绍2. 字节序2.1 简介2.2 字节序举例2.3 字节序转换函数 3. socket 地址3.1 通用 socket 地址3.2 专用 socket 地址 4. IP地址转换&#xff08;字符串ip -> 整数&#xff0c;主机、网络字节序的转换 &#xff09;5. TCP 通信流…

算法------(13)KMP

例题&#xff1a;&#xff08;1&#xff09;AcWing 831. KMP字符串 。。其实写完也不太理解。。随便写点吧 KMP就是求next数组和运用next的数组的过程。相比传统匹配模式一次更新一单位距离的慢速方法&#xff0c;next数组可以让下表字符串一次更新n - next【n】个距离&#x…

Java读取文件

读取文件为String 、访问链接直接跳转html 环境&#xff1a;SpringMVC 、前端jsp InputStreamReader FileInputStream fileInputStream new FileInputStream(formatFile.getHtmlpath());InputStreamReader reader new InputStreamReader(fileInputStream, StandardCharsets…

【EAI 026】RoboGen: 通过自动数据生成管线实现机器人技能学习

Paper Card 论文标题&#xff1a;RoboGen: Towards Unleashing Infinite Data for Automated Robot Learning via Generative Simulation 论文作者&#xff1a;Yufei Wang, Zhou Xian, Feng Chen, Tsun-Hsuan Wang, Yian Wang, Zackory Erickson, David Held, Chuang Gan 作者单…

C++:菱形继承问题

目录 1、什么是菱形继承 2、虚拟继承 3、一些常见问题 1. 什么是菱形继承&#xff1f;菱形继承的问题是什么&#xff1f; 2. 什么是菱形虚拟继承&#xff1f;如何解决数据冗余和二义性的 3. 继承和组合的区别&#xff1f;什么时候用继承&#xff1f;什么时候用组合&#…

Qt 自定义长条进度条(类似播放器进度条)

1.运行界面 2.步骤 其实很简单。 2.1绘制底图圆角矩形 2.2绘制播放进度圆角矩形 参考&#xff1a;painter绘图 3.源码 #pragma once#include <QWidget> #include <QLabel> #include <QHBoxLayout> #include <QMouseEvent> #include <QDebug&g…