美文网首页我爱编程
Java文件上传并上传至阿里云工具类

Java文件上传并上传至阿里云工具类

作者: 笑疯子 | 来源:发表于2018-07-27 14:01 被阅读0次
import com.aliyun.oss.OSSClient;
import com.meosun.data.Result;
import com.meosun.util.aliyun.OSSClientUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Date;

/**
 * 上传图片并上传到oss的工具类
 *
 * @author MrXiao
 */
public class FileUtil {

    private static Logger logger = LoggerFactory.getLogger(FileUtil.class);

    public static String uploadImage(HttpServletRequest request,MultipartFile file){
        if(file != null){
            // 获取文件名
            String originalFilename = file.getOriginalFilename();
            // 判断上传图片类型是否合法
            String fileType = OSSClientUtil.getContentType(originalFilename);
            if (StringUtil.isBlank(fileType)) {
                // 不合法
                return "图片类型不合法";
            }
            // 获取文件的类型
            String contentType = originalFilename.indexOf(".") != -1 ? originalFilename.substring(originalFilename.lastIndexOf(".") + 1, originalFilename.length()) : null;
            // 获取当前项目的路径
            String realPath = request.getSession().getServletContext().getRealPath(Constant.ALIYUN_OSS_FOLDER);
            // 获取六位随机数
            int random6 = NumberUtil.random6();
            // 生成新的文件名 (取当前时间戳和六位随机数拼接成文件名)
            String newFileName = new Date().getTime() + random6 + "." + contentType;
            // 拼接完整的路径
            String path = realPath + newFileName;
            // 判断文件夹是否存在,若不存则创建
            File mkfile = new File(realPath);
            if(!mkfile.exists()  && !mkfile.isDirectory()){
                mkfile.mkdir();
                logger.info("已创建临时存储图片文件夹");
            }
            // 将图片保存到服务器
            File newFile = new File(path);
            try {
                file.transferTo(newFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 初始化阿里云oss链接,上传图片到服务器
            OSSClient ossClient = OSSClientUtil.getOSSClient();
            OSSClientUtil.uploadObject2OSS(ossClient, newFile, Constant.ALIYUN_OSS_BUCKETNAME, Constant.ALIYUN_OSS_FOLDER);
            // 设置url有效期(十年)
            Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
            // 获取图片访问的URL
            URL url = ossClient.generatePresignedUrl(Constant.ALIYUN_OSS_BUCKETNAME, Constant.ALIYUN_OSS_FOLDER + newFileName, expiration);
            // 删除本地保存的图片
            if(StringUtil.isNotBlank(url.toString()) && newFile.exists()){
                boolean bool = newFile.delete();
                System.out.println(bool);
                if(bool)
                    logger.info("已上传图片至OSS,本地完成删除");
                else
                    logger.info("已上传图片至OSS,本地删除失败");
            }
            return url.toString();
        }
        return "";
    }

}

相关文章

网友评论

    本文标题:Java文件上传并上传至阿里云工具类

    本文链接:https://www.haomeiwen.com/subject/mrzwmftx.html