如何让chatgpt上传文件到指定位置 Springboot文件上传出现找不到指定系统路径的解决

AI资讯1年前 (2023)发布 fengdao
40 0

目录 上传文件时本地路径无效

文件上传出现找不到指定系统路径1、问题描述

关键字: 4.2.4、 Boot 1.3.1、 3.0、文件上传

报错信息:

Java.io.: java.io.n: /tmp/..8080/work///ROOT/tmp//.jpg (No such file or )

问题源码:方法报错

// 前端传入mulFileSource
// 创建压缩前源文件
File fileSourcePath = new File("tmp/source/");
File fileSource = new File(fileSourcePath编程客栈, mulFileSource.getOriginalFilename());
if (!fileSourcePath.exists()) {
    fileSourcePath.mkdirs();
}
// 将接收得图片暂存到临时文件中
mulFileSource.transferTo(fileSource);

2、问题分析

首先,看源码中文件定义,相对路径,预期路径应该是项目路径/tmp//,但是报错确是一个系统临时文件路径(的)。

其次,由于是方法报错,因此应该是该方法写入文件时报错,因此,我们跟入方法源码。

public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpServletRequest {
//中间代码省略
/**
 * Spring MultipartFile adapter, wrapping a Servlet 3.0 Part object.
 */
@SuppressWarnings("serial")
private static class StandardMultipartFile implements MultipartFile, Serializable {
//中间代码省略
@Override
public void transferTo(File dest) throws IOException, IllegalStateException {
this.part.write(dest.getPath());
package org.apache.catalina.core;
/**
 * Adaptor to allow {@link FileItem} objects generated by the package renamed
 * commons-upload to be used by the Servlet 3.0 upload API that expects
 * {@link Part}s.
 */
public class ApplicationPart implements Part {
//中间代码省略
    @Override
    public void write(String fileName) throws IOException {
        File file = new File(fileName);
        if (!file.isAbsolute()) {
            file = new File(location, fileName);
        }
        try {python
            fileItem.write(file);
        } catch (Exception e) {
            throw new IOException(e);
        }
    }
}

源码一目了然,使用.0的支持的上传文件功能时,如果我们没有使用绝对路径的话,方法会在相对路径前添加一个路径,即:file = new File(, );。当然,这也影响了的的使用。

由于我们创建的File在项目路径/tmp//,而方法预期写入的文件路径为/tmp/..8080/work///ROOT/tmp//,我们并没有创建该目录,因此会抛出异常。

3、问题解决方案

使用绝对路径

修改的值

这个可以理解为临时文件目录,我们可以通过配置的值,使其指向我们的项目路径,这样就解决了我们遇到的问题。

怎么上传位置到微信_如何让chatgpt上传文件到指定位置_h5文件上传限制上传图片

在 Boot下配置,可以在main()方法所在文件中添加如下代码:

/**
 * 文件上传临时路径
 */
 @Bean
 MultiandroidpartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    factory.setLocation("/app/pttms/tmp");
    return factory.createMultipartConfig();
}

上传文件时本地路径无效

通过网关Zuul进行附件上传的时候,有时会出现如下错误

[ ; is org..web..: Could not parse ; is java.io .: The [/tmp/..8080/work///ROOT] is not valid] with root .io .: The [/tmp/..8080/work///ROOT] is not valid

错误产生的原因

1、 boot的应用服务在启动的时候,会生成在操作系统的/tmp目录下生成一个.*的文件目录,用于”java.io.”文件流操作

TomcatEmbeddedServletContainerFactory

2、程序对文件的操作时:会生成临时文件,暂存在临时文件中;长时间不操作,导致/tmp下面的临时文件目录被删除,

且删除的文件不可恢复,上传文件时获取不到文件目录,报错

解决方式有以下几点

1.重启服务;

2.网关是否引入-boot–web依赖,若无,则将其引入;

3、设置…:true

4.修改上传文件默认的

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: 文件上传出现找不到指定系统路径的解决

© 版权声明

相关文章

暂无评论

暂无评论...