欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java文件本地上传,并以http方式浏览器显示

程序员文章站 2022-04-15 11:20:31
在平常的开发中,难免遇到上传图片的问题,又没有测试服务器的时候,你和前端对接接口,发现图片上传之后回显不出来,是一个磁盘路径:(如下图)像这种情况可以通过tomact下的功能实现,代码实现很简单,并且返回的也是http路径。解决:图片不回显问题注册了ServletContext后,springboot项目启动的时候会在c盘:C:\Users\MAIBENBEN\AppData\Local\Temp下生成类似(如下)的文件夹生成的图片就在这个文件夹下在代码中也把路径打印了出来照这这个路径找就...

在平常的开发中,难免遇到上传图片的问题,又没有测试服务器的时候,你和前端对接接口,发现图片上传之后回显不出来,是一个磁盘路径:(如下图)像这种情况可以通过tomact下的功能实现,代码实现很简单,并且返回的也是http路径。

Java文件本地上传,并以http方式浏览器显示

解决:图片不回显问题

注册了ServletContext后,springboot项目启动的时候会在c盘:
C:\Users\MAIBENBEN\AppData\Local\Temp下生成类似(如下)的文件夹
Java文件本地上传,并以http方式浏览器显示
生成的图片就在这个文件夹下

在代码中也把路径打印了出来
Java文件本地上传,并以http方式浏览器显示
照这这个路径找就能找到图片的存储路径

下面代码实现

实现:文件上传本地,以http的方式回显前端

package xgg.springboot.base.controller;

import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import xgg.springboot.common.util.GetIpAddressUtil;

import javax.servlet.ServletContext;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * @author xiegege
 * @date 2020/12/7 14:03
 */
@Slf4j
@RestController
@RequestMapping("upload")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UploadFileController {

    private final ServletContext context;

    @PostMapping("upload-image")
    public Map<String, String> upload(MultipartFile file) throws IOException {
        //参数校验
        if (file == null) {
            throw new IllegalArgumentException("file or filename object is null");
        }
        // 获取文件类型
        String contentType = file.getContentType();
        // 获取文件后缀
        String ext = contentType.substring(contentType.lastIndexOf("/") + 1);
        // uuid生成文件名 + 后缀
        String fileName = UUID.randomUUID() + "." + ext;
        // 返回url路径
        String url = "http://" + GetIpAddressUtil.getIpAddress() + ":8000/statics/attachment/" + fileName;
        // 本地磁盘存储路径
        String filePath = context.getRealPath("/") + "statics/attachment/" + fileName;
        log.info("入库本地磁盘路径:" + filePath);
        // 写入文件
        write(file.getInputStream(), filePath);
        // 返回数据
        Map<String, String> dataMap = new HashMap<>(3);
        dataMap.put("name", fileName);
        dataMap.put("url", url);
        dataMap.put("ext", ext);
        return dataMap;
    }

    /**
     * 将inputStream写入文件
     *
     * @param stream 文件流
     * @param path   要写入的文件路径
     */
    private static void write(InputStream stream, String path) {
        try {
            FileUtils.copyInputStreamToFile(stream, new File(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

调用接口

Java文件本地上传,并以http方式浏览器显示

访问路径

Java文件本地上传,并以http方式浏览器显示
图片正常显示 这里的192.168.52.1是我的本机ip
Java文件本地上传,并以http方式浏览器显示
前端回显也正常了。搞定,现在可以摸鱼 摸起来了。

需要注意的地方

项目启动后每次都会生成新的文件夹
Java文件本地上传,并以http方式浏览器显示
之前传入的文件就访问不到了,所以在测试一套流程的时候,尽量后端避免重启服务,或者是把之前的图片全部剪切到新生成的文件中。

总结

如果觉得不错,可以点赞+收藏或者关注下博主。感谢阅读!

本文地址:https://blog.csdn.net/weixin_42825651/article/details/110819263