栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

项目的图片上传(java)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

项目的图片上传(java)

OSS图片上传 1. 导入依赖
        
            com.aliyun.oss
            aliyun-sdk-oss
            2.8.3
         
2. 添加配置类
package com.sky.xiaoyuan.config;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;

import lombok.Data;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
@Data //Data的get,set用来注入properties文件
public class OSSConfig {
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    private  String endpoint = "XXX";
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    private String accessKeyId = "XXX";
    private String accessKeySecret = "XXX";
    // 填写Bucket名称,例如examplebucket。
    private String bucketName = "XXX";
    //URL前缀
    private String urlPrefix = "XXX";
    @Bean
    public OSS oSSClient(){
        return new OSSClient(endpoint,accessKeyId,accessKeySecret);
    }

}


endpoint和urlPrefix 的具体位置


accesskey具体位置(个人头像)

使用举例
package com.sky.xiaoyuan.service;

import com.aliyun.oss.OSS;

import com.sky.xiaoyuan.config.OSSConfig;
import com.sky.xiaoyuan.vo.ImageUploadVo;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.IOException;

@Service
public class ImageUploadService {

    //自定义允许上传的文件格式
    private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jepg", ".gif", ".png"};
    //注入阿里云的OSS
    @Autowired
    private OSS ossClient;
    //注入自定义配置类
    @Autowired
    private OSSConfig ossConfig;

    
    public ImageUploadVo upload(MultipartFile multipartFile) {
        //ImageUploadVo是 用来返回的数据类型,根据前端的需求来定义
        ImageUploadVo fileUploadResult = new ImageUploadVo();
        //先校验图片格式是否符合
        boolean isLegal = false;
        //遍历所有的自定义数组,判断其是否在自定义的格式中
        for (String type : IMAGE_TYPE) {
            if (StringUtils.endsWithIgnoreCase(multipartFile.getOriginalFilename(), type)) {
                isLegal = true;
                break;
            }
        }
        //如果该文件不在规范的格式中,就返回error
        if (!isLegal) {
            fileUploadResult.setStatus("error");
            return fileUploadResult;
        }
        //获取文件名
        String fileName = multipartFile.getOriginalFilename();
        //设置文件的存储路径,自定义的方法,来对路径进行命名
        String filePath = getFilePath(fileName);
        //上传到阿里云
        try {
            //三个参数分别为OSS的哪一个Bucket,上传到OSS中的路径,上传到OSS的文件的流式
            ossClient.putObject(ossConfig.getBucketName(), filePath, new ByteArrayInputStream(multipartFile.getBytes()));
        } catch (IOException e) {
            e.printStackTrace();
            fileUploadResult.setStatus("error");
            return fileUploadResult;
        }
        //封装返回给前端的数据
        fileUploadResult.setStatus("done");
        fileUploadResult.setName(this.ossConfig.getUrlPrefix() + filePath);
        fileUploadResult.setUid(String.valueOf(System.currentTimeMillis()));
        return fileUploadResult;
    }

    
    private String getFilePath(String fileName) {
        DateTime dateTime = new DateTime();
        return "images/" + dateTime.toString("yyyy") + "/" + dateTime.toString("MM") + "/" + dateTime.toString("dd") + "/" + System.currentTimeMillis() + RandomUtils.nextInt(100, 9999) + "." + StringUtils.substringAfterLast(fileName, ".");
    }
}

本地图片上传 使用举例
package com.sky.xiaoyuan.service;

import com.sky.xiaoyuan.vo.ImageUploadVo;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

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

@Service
public class ImageUploadLocalService {
    //自定义允许上传的文件格式
    private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jepg", ".gif", ".png"};

    public ImageUploadVo uploadVo(MultipartFile multipartFile) {
        //ImageUploadVo是 用来返回的数据类型,根据前端的需求来定义
        ImageUploadVo fileUploadResult = new ImageUploadVo();
        //先校验图片格式是否符合
        boolean isLegal = false;
        //遍历所有的自定义数组,判断其是否在自定义的格式中
        for (String type : IMAGE_TYPE) {
            if (StringUtils.endsWithIgnoreCase(multipartFile.getOriginalFilename(), type)) {
                isLegal = true;
                break;
            }
        }
        //如果该文件不在规范的格式中,就返回error
        if (!isLegal) {
            fileUploadResult.setStatus("error");
            return fileUploadResult;
        }
        //获取文件名
        String fileName = multipartFile.getOriginalFilename();
        //设置文件的存储路径,自定义的方法,来对路径进行命名
        String filePath = getFilePath(fileName);
        // 生成图片的绝对引用地址
        String picUrl = StringUtils.replace(StringUtils.substringAfter(filePath, "E:\java\project\tenement\"), "\", "/");
        //封装返回到前端的链接。部署到nginx后可以通过该链接访问图片
        fileUploadResult.setName("http://image.xiaoyuan.com" + picUrl);
        File newFile = new File(filePath);
        // 写文件到磁盘
        try {
            multipartFile.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:\java\project\tenement\" + File.separator + "image";
        Date nowDate = new Date();
        //路径为时间的格式
        String fileFolder = baseFolder + File.separator + new DateTime(nowDate).toString("yyyy")
                + File.separator + new DateTime(nowDate).toString("MM") + File.separator +
                new DateTime(nowDate).toString("dd");

        File file = new File(fileFolder);
        //如果路径不存在就创建该路径
        if (!file.isDirectory()) {
            file.mkdirs();
        }
        //生成新的文件名
        String newFileName = new DateTime(nowDate).toString("yyyyMMddhhmmssSSSS") + RandomUtils.nextInt(100, 9999) + "."
                + StringUtils.substringAfterLast(fileName, ".");
        return fileFolder + File.separator + newFileName;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004173.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号