上传图片到本地服务器核心代码

7 篇文章 0 订阅
该博客详细介绍了如何实现图片上传到本地服务器的功能,包括在Controller层定义接口、Service层处理上传逻辑以及使用Postman进行测试。代码示例展示了如何验证图片格式、保存文件路径、处理异常,并返回上传结果。
摘要由CSDN通过智能技术生成

上传图片到本地服务器核心代码

1.controller层

@RestController
@RequestMapping("/pic/upload")
public class PicUploadController {
    @Autowired
    private PicUploadFileSystemService uploadFileSystemService;
    /**
     * 上传图片
     *
     * @param uploadFile
     * @return
     */
    @PostMapping
    @ResponseBody
    public PicUploadResult upload(@RequestParam("file") MultipartFile uploadFile) throws  Exception{
        return this.uploadFileSystemService.upload(uploadFile);
    }
}

注意:前端上传的参数名和@RequestParam(“file”)中的“file”一样。

2. service层

import com.dubbo.entity.PicUploadResult;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

@Service
public class PicUploadFileSystemService {
    //允许上传的格式
    private static final String[] IMAGE_TYPE = new String[]{".bmp",".jpg",".jpeg",".gif",".png"};

    public PicUploadResult upload(MultipartFile uploadFile){
        //校验图片格式
        boolean isLegal = false;
        for (String type :IMAGE_TYPE) {
            if(StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(),type)){
                isLegal = true;
                break;
            }
        }
        //封装result对象 并且将文件的byte数组放置到result对象中
        PicUploadResult fileUploadResult = new PicUploadResult();
        if(!isLegal){
            fileUploadResult.setStatus("error");
            return fileUploadResult;
        }
        //文件路径
        String fileName = uploadFile.getOriginalFilename();
        String filePath = getFilePath(fileName);
        //生成图片的绝对引用地址
        String picUrl = StringUtils.replace(StringUtils.substringAfter(filePath,"E:\\code\\itcast-haoke\\haoke-upload"),"\\","/");
        fileUploadResult.setName("http://image.haoke.com"+picUrl);
        File newFile = new File(filePath);
        try{
            uploadFile.transferTo(newFile);
        }catch (IOException e){
            e.printStackTrace();
            //上传失败
            fileUploadResult.setStatus("error");
            return fileUploadResult;
        }
        fileUploadResult.setStatus("done");
        fileUploadResult.setUid(String.valueOf(System.currentTimeMillis()));
        return fileUploadResult;
    }

    private String getFilePath(String fileName) {
        String baseFolder = "E:\\code\\itcast-haoke\\haoke-upload"+File.separator+"images";
        Date nowDate = new Date();
        String fileFolder = baseFolder
                + File.separator
                +new SimpleDateFormat("yyyy").format(nowDate);
        File file = new File(fileFolder);
        if(!file.isDirectory()){
            //如果目录不存在则创建目录
            file.mkdirs();
        }
        //生成新的文件名
        String newFileName = System.currentTimeMillis()+ RandomUtils.nextInt(100,999)+"."+StringUtils.substringAfterLast(fileName,".");
        return fileFolder+File.separator+newFileName;
    }
}

3.postman测试

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值