首页>>后端>>SpringBoot->springboot上传图片到服务器?

springboot上传图片到服务器?

时间:2023-12-02 本站 点击:0

springboot 图片上传路径访问不到

MultipartFile fileImage 中有文件的流,通过这个流上传ftp服务器,或者写到电脑的磁盘中,简单点写在磁盘上就可以这样

File saveDir = new File("C:/Temp/" + fileImage.getOriginalFilename());

if (saveDir.getParentFile().exists() || saveDir.getParentFile().mkdirs()) {

    // 转存文件

    fileImage.transferTo(saveDir);

}

就保存到电脑中了,new File() 中的地址就随便你想放在那里就放在那里,接下来就想办法访问就好了。

MultipartFile 上传的时候都有个临时的文件在系统中,处理完成之后就删除,通常都是处理它的文件流,保存在本地或者上传的文件服务器

SpringBoot文件上传

基于Spring Boot的文件上传

上传方式:

1.直接上传到应用服务器

2.上传到OSS(内容存储服务器,如:阿里云,七牛云)

3.前端将图片转成Base64编码上传(小容量图片)

在Google里面打开

能上传说明已经成功了

上传图片的路径:F:\SpringBootStudy\spring-boot-damo\upload\target\classes

1.文件名在服务器端可以重命名(扩展名不变)

2.上传目录自动创建为当前系统日期

Springboot使用ftp进行文件上传下载

首先要在阿里云ECS上搭建ftp服务器,默认是有vsftpd ,它是 Linux 下的一款小巧轻快、安全易用的 FTP 服务器软件。

用下面命令查看是否安装了vsftpd,阿里云ECS默认是安装好的,如果没有参考网上文章安装。

新建用户ftpuser:

useradd ftpuser -d /home/ftpfile

设置用户密码:

passwd ftpuser

多数教程里面使用的标准的ftp maven依赖:

但是我使用的是阿里云的ECS上安装的ftp,在进行连接的时候他提示协议不正确,需要使用sftp,所以maven依赖换成了:

springboot多文件上传

MultipartFile提供了以下方法来获取上传文件的信息:

getOriginalFilename,获取上传的文件名字;

getBytes,获取上传文件内容,转为字节数组;

getInputStream,获取一个InputStream;

isEmpty,文件上传内容为空,或者根本就没有文件上传;

getSize,文件上传的大小。

transferTo(File dest),保存文件到目标文件系统;

同时上传多个文件,则使用MultipartFile数组类来接受多个文件上传:

//多文件上传 @RequestMapping(value = "/batch/upload", method = RequestMethod.POST)

    @ResponseBody    public String handleFileUpload(HttpServletRequest request){

        ListMultipartFile files = ((MultipartHttpServletRequest) request)

                .getFiles("file");

        MultipartFile file = null;

        BufferedOutputStream stream = null;

        for (int i = 0; i files.size(); ++i) {

            file = files.get(i);

            if (!file.isEmpty()) {

                try {

                    byte[] bytes = file.getBytes();

                    stream = new BufferedOutputStream(new FileOutputStream(

                            new File(file.getOriginalFilename())));

                    stream.write(bytes);

                    stream.close();

                } catch (Exception e) {

                    stream = null;

                    return "You failed to upload " + i + " = "                            + e.getMessage();

                }

            } else {

                return "You failed to upload " + i

                        + " because the file was empty.";

            }

        }

        return "upload successful";

    }

可以通过配置application.properties对SpringBoot上传的文件进行限定默认为如下配置:

spring.servlet.multipart.enabled=true

spring.servlet.multipart.file-size-threshold=0

spring.servlet.multipart.location=

spring.servlet.multipart.max-file-size=1MB

spring.servlet.multipart.max-request-size=10MB

spring.servlet.multipart.resolve-lazily=false

enabled默认为true,既允许附件上传。

file-size-threshold限定了当上传文件超过一定长度时,就先写到临时文件里。有助于上传文件不占用过多的内存,单位是MB或KB,默认0,既不限定阈值。

location指的是临时文件的存放目录,如果不设定,则web服务器提供一个临时目录。

max-file-size属性指定了单个文件的最大长度,默认1MB,max-request-size属性说明单次HTTP请求上传的最大长度,默认10MB.

resolve-lazily表示当文件和参数被访问的时候再被解析成文件。

Spring Boot 项目部署到 Linux服务器

1.首先将SpringBoot项目打包成JAR包,然后通过FTP工具上传到Linux,执行如下命令:

该命令执行后,启动jar,一旦shell窗口关闭后,JAR就停止运行了.

若需要项目在后台一直运行,需要通过如下命令启动JAR:

上述 2 和 1 的含义如下:

0 标准输入 (一般是键盘)

1 标准输出 (一般是显示屏,是用户终端控制台)

2 标准错误 (错误信息输出)

上述 console.log 为日志文件,需要在Linux中提前创建:

1.实时跟踪日志:

实时跟踪日志,只要执行findAll这个方法,就会将其对应的日志打印出来,用来跟踪特定的日志运行.

--line-buffered 是一行的缓冲区,只要这一行的缓冲区满了就会打印出来,所以可以用于实时监控日志.

2.tailf -n 200 console.log 打印最后200行日志,并持续跟踪日志.

tail -n 500 console.log | more 分页查看最后500行日志.

1.编写一个shell脚本,命名为 start_JAR.sh,脚本和可执行JAR放在同一目录下.

2.执行 start_JAR.sh 脚本,启动可执行JAR.

添加可执行权限:

执行脚本:

从零开始的Springboot的HelloWord,并实现图片上传功能

最近因需要快速搭建一个后台,目标功能为实现图片上传功能,然后通过Java后台调用Python模块运行,返回运行结果显示。

由于对后台功能要求简单,可创建最简单的 springboot demo即可。

此处注意 @RequestMapping("/index") 中路径 “/index” 和 返回的页面名字 “index_form” 不要相同,否则会报错

界面:

当在页面中选择文件加入图片时,实现效果如下:


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