js+html+springboot实现文件夹上传遇到的坑及其解决方案!

本文介绍了在B/S架构下实现文件夹上传时遇到的五个问题,包括H5获取文件路径问题、同名文件夹处理、创建目录的前后台选择、请求顺序保证以及遍历文件夹的限制。针对这些问题,提供了详细的解决方案,如按完整路径判断目录创建、前台判断同名文件夹、后台批量创建目录、使用onload保证请求顺序和分类处理文件上传。

最近由于项目需要开始在之前文件分片上传文件的基础上实现文件夹的上传。在开发B/S架构的文件夹上传时遇到了一下问题,并给出我们的解决方案以供参考。如您有更好的方案也欢迎及时的交流。

问题一:H5获取文件路径之后只有文件完整的相对路径串,不能直接获取他的父目录以及子目录?
首先,简单示范一下H5中获取文件完整相对路径的方法,获取到的路径形式一般为:test/a/b/c.txt的形式,如下:

var files = event.target.files;
var i=0;
var fullFilePath = files[i].webkitRelativePath;// 包含文件名的完整路径

问题分析:
由于不能像windows下可以直接使用isDirectory或者isfile之类的函数,所以只能取出文件的完整路径,然后根据已经创建了的路径列表来判断该级目录是否需要创建,而不能按照目录层级一级一级的去上传。
解决方案:
取出文件的完整目录串,拆分之后逐级判断该级是否需要创建,问了防止存在目录名称相同的情况,可以使用取完整的目录串的形式判断,即:判断test/a/b/是否存在时,需要先判断test若创建再判断test/a已经创建,再判断test/a/b已经创建。或者使用目录对应的ID串的形式判断一个目录是否已经创建。

问题二、前台是否允许存在同名文件夹?
可能在本地的C:\和D:\下都存在一个叫做test的目录,但是内容不同,这时需要允许上传这两个同名文件夹。所以这种情况必须要实现前台允许同名目录结构在同一父目录下存在的情况。

问题三、在前台创建目录还是在后台创建目录的问题?
问题分析:
(1)在前台创建目录,需要ajax请求等待后台创建完成之后才能进行上传,可能会影响上传的效率。
(2)在后台创建目录,由于前台传递给后台的是需要创建的目录串,因此当创建的根目录是相同的名称的时候,后台只能

<think>我们正在处理一个关于Vue+SpringBoot项目集成时,在开发环境中仅显示SpringBoot文件夹的问题。根据用户描述,当打开项目时,IDE(如IntelliJIDEA)只显示了SpringBoot相关的文件夹结构,而没有显示Vue部分的文件夹。这通常是由于项目结构配置或IDE设置导致的。结合站内引用内容,我们注意到:-引用[1][2]提到SpringBoot简化了Web开发配置,通过`spring-boot-starter-web`依赖整合了Web开发所需组件。-引用[3]提到了Thymeleaf模板引擎的配置,但用户使用的是Vue,所以不直接相关。-引用[4]是无关的(开放源代码下载),可忽略。在Vue+SpringBoot前后端分离项目中,通常有两个独立的子项目:1.后端SpringBoot项目(通常放在一个目录下,比如`backend`)2.前端Vue项目(通常放在另一个目录下,比如`frontend`)问题原因分析:1.**项目结构问题**:如果Vue项目没有放在SpringBoot项目的目录下,而是作为同级目录,那么当用IDE打开SpringBoot项目时,自然看不到Vue的文件夹。我们需要将整个项目(包含前后端)组织在一个根目录下,然后用IDE打开这个根目录。2.**IDE设置问题**:有些IDE(如IntelliJIDEA)默认会忽略某些文件夹(比如`node_modules`),或者如果前端项目是独立项目,但没有被正确识别为模块,也会导致不显示。解决方案:**方案一:正确组织项目结构并打开整个项目**1.确保项目结构如下:```my-project/#项目根目录backend/#SpringBoot项目src/pom.xml...frontend/#Vue项目src/package.json...```2.使用IDE(如IntelliJIDEA)打开整个根目录`my-project`,而不是只打开`backend`文件夹。**方案二:在IDE中手动添加前端模块(如果前端项目不在同一个根目录下)**如果前端项目已经存在但不在同一个根目录下,可以:1.在IDE中打开SpringBoot项目。2.然后通过IDE的菜单添加模块:File->New->ModulefromExistingSources...,然后选择前端项目的文件夹(包含package.json的目录),并按照向导导入(通常选择作为Vue模块,IDEA会识别为前端项目)。**方案三:配置IDE的忽略文件(如果前端文件夹被忽略)**有时IDE会自动忽略某些文件夹(比如`node_modules`),但我们可能希望看到除了`node_modules`之外的其他前端文件夹。可以检查IDE是否忽略了整个前端目录:1.在IDEA中,打开设置:File->Settings2.搜索“IgnoredFilesandFolders”,检查是否将前端目录加入了忽略列表。如果是,请移除忽略。**方案四:检查项目配置(如果使用了Maven多模块)**如果项目采用了Maven多模块结构,需要确保前端模块也被包含在根pom.xml中。但通常Vue项目不需要作为Maven模块,所以这种方案较少使用。根据以上分析,最常见的原因是用户直接打开了SpringBoot项目目录(backend),而没有打开整个项目的根目录(包含backend和frontend)。因此,建议用户检查项目结构,并尝试打开整个根目录。相关问题:§§相关问题§§1.如何正确组织Vue+SpringBoot前后端分离项目的目录结构?2.在IntelliJIDEA中如何导入多个模块(如前后端)?3.Vue项目中哪些文件夹通常会被IDE忽略?如何取消忽略?</think> ### Vue+SpringBoot项目集成时仅显示SpringBoot文件夹的原因及解决方案 #### 问题原因分析 1. **项目结构认知问题** Vue+SpringBoot项目通常是前后端分离架构: - SpringBoot作为后端服务(位于类似`backend`目录) - Vue作为前端项目(位于类似`frontend`目录) IDE默认只识别Java项目结构,可能未加载前端目录[^1][^2]。 2. **IDE配置限制** 如使用IntelliJ IDEA: - Vue目录未被识别为有效模块 - 前端目录被标记为"Excluded"(排除状态) - 缺少前端开发插件(Vue.js插件) 3. **构建工具配置缺失** - `pom.xml`/`build.gradle`未配置前端构建插件(如`frontend-maven-plugin`) - 未设置资源目录映射(参考引用[3]的资源路径配置)[^3] #### 解决方案 ##### 方案一:IDE手动配置 1. **添加Vue模块** - 右键项目根目录 → "Add Framework Support" - 勾选`JavaScript`和`Vue.js`(需提前安装插件) ```xml <!-- 示例:确保前端资源目录被识别 --> <resources> <resource> <directory>frontend/dist</directory> </resource> </resources> ``` 2. **解除目录排除** - 右键前端目录 → "Mark Directory as" → "Unmark as Excluded" - 检查`.idea/workspace.xml`删除`excludeFolder`相关配置 ##### 方案二:项目结构重构(推荐) 1. **标准目录结构** ``` project-root/ ├── backend/ # SpringBoot项目(含pom.xml) │ └── src/main/resources/static # 前端构建产物目录 └── frontend/ # Vue项目(含package.json) ``` 2. **添加构建配置** 在SpringBoot的`pom.xml`添加: ```xml <build> <plugins> <plugin> <groupId>com.github.eirslett</groupId> <artifactId>frontend-maven-plugin</artifactId> <version>1.12.1</version> <executions> <execution> <id>install-node</id> <phase>generate-resources</phase> <goals> <goal>install-node-and-npm</goal> </goals> </execution> <execution> <id>npm-build</id> <phase>generate-resources</phase> <goals> <goal>npm</goal> </goals> <configuration> <arguments>run build</arguments> <workingDirectory>../frontend</workingDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 执行`mvn clean package`时会自动构建Vue项目[^2] ##### 方案三:开发环境热部署配置 1. **Vue开发服务器独立运行** ```bash # 前端目录启动 cd frontend npm run serve ``` 2. **SpringBoot配置代理**(参考引用[1]的热部署)[^1] ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**") .addResourceLocations("classpath:/static/"); } } ``` #### 验证步骤 1. 执行`mvn spring-boot:run`后访问`http://localhost:8080` 2. 检查控制台日志: ```log Mapped URL path [/] onto handler... Serving static content from [classpath:/static/] ``` #### 调试建议 - 使用`VS Code`单独打开`frontend`目录进行前端开发 - 使用`Postman`测试后端API连通性 - 检查浏览器开发者控制台的404错误路径
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值