Java implementa la carga de archivos en Ali OSS

Introducción

La publicación del blog aquí en realidad quiere mostrar una clase de herramienta para cargar archivos en Ali OSS, pero el proceso es cumplir completamente con un requisito comercial que una empresa desarrolla e implementa la carga de acuerdo con las necesidades comerciales. puede ser más complicado. Prolongado. Así que decida si necesita tomar prestado este blog de acuerdo con sus propias necesidades.

herramientas de desarrollo

idea + maven + cartero (utilizado como herramienta de prueba)

entorno de desarrollo

jdk 1.8 + SpringBoot + maven (administración de paquetes jar)

versión del paquete jar: 2.8.2

<!--阿里云oss存储-->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>2.8.2</version>
</dependency>

OSS-inicializar OSSClient

Generar un objeto OSSClient configurado

punto final: dirección de solicitud con nodo regional

keyid: ID de usuario de la nube de Alibaba

Keysecret: Contraseña de usuario de la nube de Alibaba

oss.endpoint = oss-cn-shanghai.aliyuncs.com
oss.keyid= *********
oss.keysecret= *********
import com.aliyun.oss.OSSClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * oss配置类
 *
 * @author chenpengfei
 */
@Configuration
public class OSSClientConfig {
    @Value("${oss.endpoint}")
    String endpoint;
    @Value("${oss.keyid}")
    String accessKeyId;
    @Value("${oss.keysecret}")
    String accessKeySecret;

    // 创建OSS客户端Bean
    @Bean
    public OSSClient getOSSClient() {
        return new OSSClient(endpoint, accessKeyId, accessKeySecret);
    }
}

Clase de herramienta de carga de OSS

bucketname: nombre del espacio de almacenamiento en la nube de Alibaba

fileHost: el nombre de dominio del servidor Ali

filePath: subir la ruta del archivo

oss.bucketname = xxxxxx
oss.fileHost= xxxxxx
oss.filePath= upload
package com.gd.common.utils.oss;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.File;

/**
 * 阿里OSS上传服务
 */
@Component
@Log4j2
public class AliyunOSSUtil {
    @Value("${oss.bucketname}")
    String bucketName;
    @Resource
    private OSSClient client;

    /**
     * 上传文件
     */
    public String upLoad(File file, String fileUrl) {
        log.info("------OSS文件上传开始--------" + file.getName());
        // 判断文件是否为空
        if (file == null) {
            return null;
        }

        try {
            // 判断容器是否存在,不存在就创建
            if (!client.doesBucketExist(bucketName)) {
                client.createBucket(bucketName);
                CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
                createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
                client.createBucket(createBucketRequest);
                // 设置权限(公开读)
                client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
            }
            // 上传文件
            PutObjectResult result = client.putObject(new PutObjectRequest(bucketName, fileUrl, file));
            if (result != null) {
                log.info("------OSS文件上传成功------" + fileUrl);
                return fileUrl;
            }
        } catch (OSSException oe) {
            log.error(oe.getMessage());
        } catch (ClientException ce) {
            log.error(ce.getErrorMessage());
        } finally {
        }
        return null;
    }
}

Realización de la función comercial

  • Obtener la URL del nombre de dominio del servidor
  • carga de un solo archivo
  • Carga de varios archivos

Servicio

import org.springframework.web.multipart.MultipartFile;
 
public interface OssUploadService {
    
    

    /**
     * 上传文件
     * @param file
     * @return
     */
    String upload(MultipartFile file);
}

impl

package com.maoni.ssmtest.service.impl;

import com.maoni.ssmtest.service.OssUploadService;
import com.maoni.ssmtest.utils.date.DatePattern;
import com.maoni.ssmtest.utils.date.DateUtils;
import com.maoni.ssmtest.utils.aliOSSUtil.AliyunOSSUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * @author ouj
 */

@Service
public class OssUploadServiceImpl implements OssUploadService {
    
    

    private  final AliyunOSSUtil aliyunOSSUtil;

    @Autowired
    public OssUploadServiceImpl(AliyunOSSUtil aliyunOSSUtil){
    
    
        this.aliyunOSSUtil = aliyunOSSUtil;
    }

    @Value("${oss.filePath}")
    private String filePath;

    @Override
    public String upload(MultipartFile file) {
    
    
        // 返回客户端文件系统中的原始文件名
        String fileName = file.getOriginalFilename();
        System.out.println(fileName);

        try{
    
    
            if (file != null) {
    
    
                // 判定文件名是否为 ""
                if (!"".equals(fileName.trim())) {
    
    
                    File newFile = new File(fileName);
                    FileOutputStream os = new FileOutputStream(newFile);
                    // 以字节数组的形式返回文件的内容,再输出到文件输出流中
                    os.write(file.getBytes());
                    os.close();
                    // 将接受的文件传输到给定的目标文件 file-->newFile
                    file.transferTo(newFile);
                    // 根据不同文件 类型/日期 生成不同的文件夹
                    Date date = new Date();
                    String datePath = DateUtils.formatDateByStyle(date, DatePattern.CN_DATE_BASIC_STYLE4.getDatePattern());
                    String timeStamp = String.valueOf(System.currentTimeMillis());
                    fileName = timeStamp + fileName.substring(fileName.lastIndexOf("."));
                    String path;
                    if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") || fileName.endsWith(".png")) {
    
    
                        // images
                        path = filePath + "images/" + datePath + "/" + fileName;
                    } else {
    
    
                        path = filePath + "other/" + datePath + "/" + fileName;
                    }
                    // 上传到OSS
                    String uploadUrl = aliyunOSSUtil.upLoad(newFile, path);
                    newFile.delete();
                    if (uploadUrl != null) {
    
    
                        return uploadUrl;
                    }
                }
            }
        }catch (Exception e){
    
    
            e.printStackTrace();
        }
        return null;
    }
}

controlador

import com.maoni.ssmtest.domain.OssData;
import com.maoni.ssmtest.service.OssUploadService;
import com.maoni.ssmtest.utils.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author ouj
 */
@RestController
@Scope("prototype")
@RequestMapping("oss")
public class OssUploadController {
    
    

    private final OssUploadService ossUploadService;

    @Value("${oss.fileHost}")
    String fileHost;

    @Autowired
    public OssUploadController(OssUploadService ossUploadService) {
    
    
        this.ossUploadService = ossUploadService;
    }

    /**
     * 获取服务器的ip地址
     * @return
     */
    @GetMapping("getHost")
    public AjaxResult getHost() {
    
    
        OssData ossData = new OssData();
        ossData.setHost(fileHost);
        return AjaxResult.AjaxSuccess(ossData);
    }

    /**
     * oss上传文件(单个文件上传)
     * @param file
     * @return
     */
    @PostMapping("fileUpload")
    public AjaxResult fileUpload(@RequestParam("file") MultipartFile file) {
    
    
        OssData ossData = new OssData();
        // 上传文件返回url
        String url = ossUploadService.upload(file);
        if (url != null) {
    
    
            ossData.setHost(fileHost);
            ossData.setPath(fileHost + url);
            return AjaxResult.AjaxSuccess(ossData);
        } else {
    
    
            return AjaxResult.AjaxError(300, "上传失败");
        }
    }

    /**
     * oss多文件上传
     * @param files
     * @return
     */
    @PostMapping("filesUpload")
    public AjaxResult filesUpload(@RequestParam("file") List<MultipartFile> files) {
    
    
        OssData ossData = new OssData();
        Map<String, String> urls = new HashMap<>();
        for (MultipartFile file : files) {
    
    
            String url = ossUploadService.upload(file);
            if (url != null) {
    
    
                String fileName = file.getOriginalFilename();
                url = fileHost + url;
                urls.put(fileName, url);
            } else {
    
    
                ossData.setFileName(file.getOriginalFilename());
                ossData.setPath(fileHost + url);
                return AjaxResult.AjaxError(100, ossData, "上传失败");
            }
        }
        return AjaxResult.AjaxSuccess(urls);
    }

    /**
     * oss 分俩个file,多文件上传
     * @param file01
     * @param file02
     * @return
     */
    @PostMapping("filesUploadMore")
    public AjaxResult filesUploadMore(@RequestParam("file01") List<MultipartFile> file01, @RequestParam("file02") List<MultipartFile> file02) {
    
    
        OssData ossData = new OssData();
        Map<String, String> urls = new HashMap<>();
        for (MultipartFile file : file01) {
    
    
            try {
    
    
                String url = ossUploadService.upload(file);
                if (url != null) {
    
    
                    String fileName = file.getOriginalFilename();
                    url = fileHost + url;
                    urls.put(fileName, url);
                } else {
    
    
                    ossData.setFileName(file.getOriginalFilename());
                    return AjaxResult.AjaxError(100, ossData, "上传失败");
                }
            } catch (Exception e) {
    
    
                e.printStackTrace();
                ossData.setFileName(file.getOriginalFilename());
                return AjaxResult.AjaxError(100, ossData, "上传失败");
            }
        }

        for (MultipartFile file : file02) {
    
    
            try {
    
    
                String url = ossUploadService.upload(file);
                if (url != null) {
    
    
                    String fileName = file.getOriginalFilename();
                    url = fileHost + url;
                    urls.put(fileName, url);
                } else {
    
    
                    ossData.setFileName(file.getOriginalFilename());
                    return AjaxResult.AjaxError(100, ossData, "上传失败");
                }
            } catch (Exception e) {
    
    
                e.printStackTrace();
                ossData.setFileName(file.getOriginalFilename());
                return AjaxResult.AjaxError(100, ossData, "上传失败");
            }
        }
        return AjaxResult.AjaxSuccess(urls);
    }
}

Clase de paquete OssData (nombre de dominio del servidor + ruta del archivo de carga + nombre del archivo de carga)

/**
 * @author ouj
 */
@Data
public class OssData {
    /**
     * 服务器域名
     */
    private String host;
    /**
     * 上传文件路径
     */
    private String path;
    /**
     * 上传文件名
     */
    private String fileName;
}

Resultados de la prueba del cartero

imagen-20211111113644158

Supongo que te gusta

Origin blog.csdn.net/m0_49969111/article/details/121264808
Recomendado
Clasificación