java获取网络图片(比如微信授权后的头像)上传至linux服务器

//原生获取微信信息CodeWxUserInfoVo,然后将头像上传至自己的linux服务器
//因为上传用的是 MultipartFile  file所以我下载图片后返回了MultipartFile文件的格式
//访问的时候自己的域名获取ip加这个文件路径

先导包
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-mock</artifactId>
    <version>2.0.8</version>
</dependency>

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.http.HttpUtil;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.nio.file.Files;
/**
*工具类
/
public class ImageUtil {
      //服务器地址
      public static final String lujinUrl="root/****/***/";
//本地地址
//    public static final String lujinUrl="F:\\testimage\\";

    public static MultipartFile uploadWxAvg(String imgUrl) throws IOException {
        File destFile = new File(lujinUrl+ IdUtil.randomUUID() +".png");
        HttpUtil.downloadFile(imgUrl, destFile);
        InputStream inputStream = new FileInputStream(destFile);
        MultipartFile multipartFile = new MockMultipartFile(destFile.getName(), destFile.getName(), Files.probeContentType(destFile.toPath()),inputStream);
        return multipartFile;
    }


}

//这里用返回给前段或者自己用,url就是自己服务器的地址了,我是返回前段,前段将信息还有别的信息传给我在别的地方使用的,根据你们的情况用url就好了

@Autowired
OSSConfig ossConfig;
@Override
public Map createUserInfo(CodeWxUserInfoVo codeWxUserInfoVo) throws IOException {
    MultipartFile avatar=ImageUtil.uploadWxAvg(codeWxUserInfoVo.getWxProfile());
    String url = OSSBootUtil.uploadOSS(ossConfig, avatar);
    codeWxUserInfoVo.setWxProfile(url);
    Map map = new HashMap();
    map.put("WxUserInfo",codeWxUserInfoVo);
    return map;
}
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import java.io.Serializable;

/**
 * @Description: 阿里云 OSS 配置信息自己在配置文件配好
 */
@Data
@Configuration
public class OSSConfig implements Serializable {

    private static final long serialVersionUID = -119396871324982279L;

    /**
     * 阿里云 oss 站点
     */
    @Value("${oss.endpoint}")
    private String endpoint;

    /**
     * 阿里云 oss 资源访问 url
     */
    @Value("${oss.url}")
    private String url;

    /**
     * 阿里云 oss 公钥
     */
    @Value("${oss.accessKeyId}")
    private String accessKeyId;

    /**
     * 阿里云 oss 私钥
     */
    @Value("${oss.accessKeySecret}")
    private String accessKeySecret;

    /**
     * 阿里云 oss 文件根目录
     */
    @Value("${oss.bucketName}")
    private String bucketName;


}
package com.xinhao.model.vo.codeUserVo;

import com.xinhao.annotation.Create;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;

@Data
@ApiModel(value = "微信授权InfoVo")
public class CodeWxUserInfoVo {

    @ApiModelProperty(value = "微信openId")
    private String wxOpenId;

    @ApiModelProperty(value = "微信nickname")
    private String wxNickname;

    @ApiModelProperty(value = "微信profile")
    private String wxProfile;



}

 

import com.aliyun.oss.ClientConfiguration;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.model.ObjectMetadata;
import com.xinhao.configurer.OSSConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.http.entity.ContentType;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * @Description: 阿里云 oss 上传工具类(高依赖版)
 */
@Slf4j
public class OSSBootUtil {

    private OSSBootUtil(){}

    /**
     * oss 工具客户端
     */
    private volatile static OSSClient ossClient = null;

    /**
     * 上传文件至阿里云 OSS
     * 文件上传成功,返回文件完整访问路径
     * 文件上传失败,返回 null
     *
     * @param ossConfig oss 配置信息
     * @param file 待上传文件
     * @param fileDir 文件保存目录upload/
     * @return oss 中的相对文件路径
     */
    public static String upload(OSSConfig ossConfig, MultipartFile file, String fileDir){
        initOSS(ossConfig);
        StringBuilder fileUrl = new StringBuilder();
        try {
            String originalFilename = file.getOriginalFilename();
            int i = originalFilename.lastIndexOf('.');
            String suffix = originalFilename.substring(i);
            //1590745324257-8fd76627-5cdc-478f.jpg
            String fileName = System.currentTimeMillis() + "-" + UUID.randomUUID().toString().substring(0,18) + suffix;
            if (!fileDir.endsWith("/")) {
                fileDir = fileDir.concat("/");
            }
            fileUrl = fileUrl.append(fileDir + fileName);


            // 添加 ContentType
            ObjectMetadata objectMetadata = new ObjectMetadata();
            // objectMetadata.setContentType("image/jpg");
            objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));

            ossClient.putObject(ossConfig.getBucketName(), fileUrl.toString(), file.getInputStream(),objectMetadata);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        //fileUrl = fileUrl.insert(0,ossConfig.getUrl());
        return fileUrl.toString();
    }

    /**
     * 初始化 oss 客户端
     * @param ossConfig
     * @return
     */
    private static OSSClient initOSS(OSSConfig ossConfig) {
        if (ossClient == null ) {
            synchronized (OSSBootUtil.class) {
                if (ossClient == null) {
                    ossClient = new OSSClient(ossConfig.getEndpoint(),
                            new DefaultCredentialProvider(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()),
                            new ClientConfiguration());
                }
            }
        }
        return ossClient;
    }


    public static String uploadOSS(OSSConfig ossConfig, MultipartFile file) {
        // 高依赖版本 oss 上传工具
        String ossFileUrlBoot = OSSBootUtil.upload(ossConfig, file, "upload");
        return ossFileUrlBoot;
    }



    public static String getcontentType(String FilenameExtension) {
        if (FilenameExtension.equalsIgnoreCase(".bmp")) {
            return "image/bmp";
        }
        if (FilenameExtension.equalsIgnoreCase(".gif")) {
            return "image/gif";
        }
        if (FilenameExtension.equalsIgnoreCase(".jpeg") ||
                FilenameExtension.equalsIgnoreCase(".jpg") ||
                FilenameExtension.equalsIgnoreCase(".png")) {
            return "image/jpg";
        }
        if (FilenameExtension.equalsIgnoreCase(".html")) {
            return "text/html";
        }
        if (FilenameExtension.equalsIgnoreCase(".txt")) {
            return "text/plain";
        }
        if (FilenameExtension.equalsIgnoreCase(".vsd")) {
            return "application/vnd.visio";
        }
        if (FilenameExtension.equalsIgnoreCase(".pptx") ||
                FilenameExtension.equalsIgnoreCase(".ppt")) {
            return "application/vnd.ms-powerpoint";
        }
        if (FilenameExtension.equalsIgnoreCase(".docx") ||
                FilenameExtension.equalsIgnoreCase(".doc")) {
            return "application/msword";
        }
        if (FilenameExtension.equalsIgnoreCase(".xml")) {
            return "text/xml";
        }
        return "image/jpg";
    }



    /**
     * 上传文件至阿里云 OSS
     * 文件上传成功,返回文件完整访问路径
     * 文件上传失败,返回 null
     *
     * @param ossConfig oss 配置信息
     * @param file 待上传文件
     * @param fileDir 文件保存目录
     * @return oss 中的相对文件路径
     */
    public static Map uploadVideo(OSSConfig ossConfig, MultipartFile file, String fileDir,String targerFilePath){
        initOSS(ossConfig);
        Map res = new HashMap();
        StringBuilder fileUrl = new StringBuilder();
        try {
            String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.'));
            String fileName = System.currentTimeMillis() + "-" + UUID.randomUUID().toString().substring(0,18) + suffix;
            if (!fileDir.endsWith("/")) {
                fileDir = fileDir.concat("/");
            }
            fileUrl = fileUrl.append(fileDir + fileName);
            ossClient.putObject(ossConfig.getBucketName(), fileUrl.toString(), file.getInputStream());

            res.put("videoUrl",fileUrl.toString());

            //第一帧
            File first = ToolVideo.getFirst(file,res,targerFilePath);
            String firstName = System.currentTimeMillis() + "-" + UUID.randomUUID().toString().substring(0,18) + ".jpg";
            String firstUrl = fileDir + firstName;

            // 添加 ContentType
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentType(getcontentType(firstUrl.substring(firstUrl.lastIndexOf("."))));
            ossClient.putObject(ossConfig.getBucketName(), firstUrl, first,objectMetadata);
            res.put("firstUrl",firstUrl);
            log.info("第一帧的URL:{}",firstUrl);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        return res;
    }


}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值