java上传图片

这里要先在resources/static下面创建一个包用来保存图片(这个包的名称要和下面工具类的路径名称要一样)

1,创建一个工具类LocalUploadImageUtils

package com.pla.common.utils;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.util.UUID;

/**
 * @author LiuTBaby
 * blog: cnblogs.com/lbao
 * @version 1.0
 * @date: 2022/6/27 9:37
 */
public class LocalUploadImageUtils{

    /**
     * 上传图片到服务器,默认保存在image文件夹下,文件名前默认加上uuid
     * @param file 上传图片
     * @return 文件访问路径
     */
    public static String uploadImageFile(MultipartFile file) {

        String newFileName = getNewFileNameByUuid(file.getOriginalFilename());

        String finalPath = ConfigFileMessageUtils.IMAGE_ALL_DIR + newFileName;

        String url = "http://"
                + ConfigFileMessageUtils.LOCAL_IP+ ":"
                + ConfigFileMessageUtils.SERVER_PORT + "/"
                + ConfigFileMessageUtils.IMAGE_DIR_NAME + "/"
                + newFileName;

        boolean flag = upload(file, finalPath);

        if (!flag) {
            throw new RuntimeException("图片上传失败");
        }

        return url;
    }

    /**
     * 上传图片到本地服务器,文件名自定义
     * @param file 图片文件
     * @param fileName 自定义文件名
     * @return 文件访问路径
     */
    public static String uploadImageFile(MultipartFile file,String fileName) {

        String finalPath = ConfigFileMessageUtils.IMAGE_ALL_DIR  + fileName;

        String url = "http://"
                + ConfigFileMessageUtils.LOCAL_IP+ ":"
                + ConfigFileMessageUtils.SERVER_PORT + "/"
                + ConfigFileMessageUtils.IMAGE_DIR_NAME + "/"
                + fileName;

        boolean flag = upload(file, finalPath);

        if (!flag) {
            throw new RuntimeException("图片上传失败");
        }
        return url;
    }

    /**
     * 为文件名添加前缀c
     * @param fix 需添加的前缀
     * @param fileName 文件名
     * @return 新的文件名
     */
    public static String addFixForFileName(String fix, String fileName) {
        return fix + getFileSuffix(fileName);
    }

    /**
     * 上传文件到服务器
     * @param file 需要上传的文件
     * @param finalPath 文件存放的服务器路径
     * @return 上传成功返回true,失败返回false
     */
    private static boolean upload(MultipartFile file, String finalPath){

        File dest = new File(finalPath);

        //判断文件父目录是否存在
        if(!dest.getParentFile().exists()){
            dest.getParentFile().mkdir();
        }
        //上传文件到服务器,相当于将内存的文件输出到服务器,OutputStream,需要try....catch....
        try {
            //保存文件
            //transferTo(dest)方法将上传文件写到服务器上指定的文件
            file.transferTo(dest);
            return true;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }

    }
    private static String getNewFileNameByUuid(String fileName) {
        return getUUID() + getFileSuffix(fileName);
    }
    private static String getUUID(){
        return UUID.randomUUID().toString().replace("-", "") ;
    }
    private static String getFileSuffix(String fileName){
        return fileName.substring(fileName.lastIndexOf("."));
    }

}
/**
 * 读取图片所需基本信息
 */
@Component
class ConfigFileMessageUtils implements InitializingBean {

    @Value("${server.port}")
    private String serverPort;
    /**
     * 本机IP地址
     */
    public static String LOCAL_IP;
    /**
     * 本机服务器端口号
     */
    public static String SERVER_PORT;
    /**
     * 保存图片目录名,默认resources/static下
     */
    public static String IMAGE_DIR_NAME = "img";
    /**
     * 图片存放的全路径名
     */
    public static String IMAGE_ALL_DIR;

    /**
     * 该方法在服务器加载时被调用
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {

        SERVER_PORT = this.serverPort;

        LOCAL_IP = InetAddress.getLocalHost().getHostAddress();

        IMAGE_ALL_DIR = System.getProperty("user.dir") + "/src/main/resources/static/" + IMAGE_DIR_NAME + "/";

    }
}

/**
 * 释放static下保存文件的目录可被访问
 */
@Configuration
@EnableWebMvc
class ImageWebMvcConfigurerAdapter implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
        //访问映射,请求放行处理
        registry.addResourceHandler(""+ConfigFileMessageUtils.IMAGE_DIR_NAME+"//**")
                .addResourceLocations("file:"+ConfigFileMessageUtils.IMAGE_ALL_DIR);
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations(
                        "classpath:/META-INF/resources/webjars/");
    }
}



wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2.Controller层

package com.pla.controller;

import com.pla.common.result.Result;
import com.pla.common.utils.LocalUploadImageUtils;
import com.pla.service.UploadPictureService;
import io.swagger.annotations.ApiOperation;
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;

@RestController
@RequestMapping("/UploadPicture")
public class UploadPictureController {

    @Autowired
    private UploadPictureService uploadPictureService;

    @ApiOperation("图片上传")
    @PostMapping("/uPicture")
    public Result UploadPicture(MultipartFile file ){

        String fileName = file.getOriginalFilename();

        System.out.println(fileName);
        
        //调用工具类的方法
        String imageFile = LocalUploadImageUtils.uploadImageFile(file,fileName);
        if (!imageFile.isEmpty()){
            return Result.ok(imageFile);
        }
        return Result.fail();
    }




}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

这里图片发送成功后会返回一个URL地址,这个地址可以在浏览器上面进行访问。​​​​​​​

可以根据自己的需求进行修改代码,谢谢大家的浏览!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值