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/");
    }
}
 
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();
    }

}
这里图片发送成功后会返回一个URL地址,这个地址可以在浏览器上面进行访问。​​​​​​​
可以根据自己的需求进行修改代码,谢谢大家的浏览!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java图片上传接口的示例: ```java import java.io.File; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; @WebServlet("/upload") @MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB maxFileSize=1024*1024*10, // 10MB maxRequestSize=1024*1024*50) // 50MB public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); // 获取上传文件的部件 Part filePart = request.getPart("file"); // 获取文件名 String fileName = extractFileName(filePart); // 保存到服务器的文件路径 String savePath = "C:/uploads/" + fileName; // 写入文件 filePart.write(savePath); out.println("<html>"); out.println("<head>"); out.println("<title>文件上传成功</title>"); out.println("</head>"); out.println("<body>"); out.println("<h3>文件上传成功!</h3>"); out.println("</body>"); out.println("</html>"); } // 从Part获取文件名 private String extractFileName(Part part) { String contentDisp = part.getHeader("content-disposition"); String[] items = contentDisp.split(";"); for (String s : items) { if (s.trim().startsWith("filename")) { return s.substring(s.indexOf("=") + 2, s.length()-1); } } return ""; } } ``` 在示例中,使用注解`@MultipartConfig`声明上传文件的配置参数。`fileSizeThreshold`设置内存缓冲区的大小,当上传文件超过缓冲区大小时,将会保存到磁盘上。`maxFileSize`和`maxRequestSize`分别设置单个文件和整个请求的最大大小限制。在doPost方法中,使用`request.getPart("file")`获取上传的文件部件,使用`extractFileName`方法从部件中获取文件名,然后将文件写入到指定路径。最后返回上传成功的消息给客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值