上传文件到本地&服务器

本地

1.UploadFile

package com.takeout.config;

import com.takeout.comm.Result;
import org.springframework.util.ClassUtils;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * @Author: 文君
 * @Date: 2023-06-20-17:25
 * @Description:
 */
public class UploadFile {
    /**
     * 单文件上传
     * @param file
     * @return
     */
    public static Result<String> upload(MultipartFile file,String basePath){
        String newfileName;
        if (!file.isEmpty()) {
            String fileName = file.getOriginalFilename();
            newfileName= UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."), fileName.length());//设置新文件名
            //String path = ClassUtils.getDefaultClassLoader().getResource("").getPath() + "static/";
            String resourcesPath =basePath+"//"+ newfileName;
            System.out.println(resourcesPath);
            //此路径可以自己定义,这样设置的话可以在自创的target/classes/static目录下保存,
            //在前端可以直接通过URL方式进行访问
            try {
                MyConfig.fileupload(file.getBytes(),basePath, newfileName);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            return Result.fail("上传文件不能为空");
        }
        return Result.success(newfileName);
    }

    /**
     * 多文件上传
     * @param files
     * @return
     */
    public static Result<Map<String, Object>> UploadList(MultipartFile[] files,String basePath){
        Map<String, Object> data = new HashMap<>();
        List list=new ArrayList<>();
        for (MultipartFile fileUpload : files) {
            String fileName = fileUpload.getOriginalFilename();//文件名
            //String tmpFilePath = ClassUtils.getDefaultClassLoader().getResource("").getPath() + "static/";
            //没有路径就创建路径
            File tmp = new File(basePath);
            if (!tmp.exists()) {
                tmp.mkdirs();
            }
            String newfileName=UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."), fileName.length());//设置新文件名
            String resourcesPath =basePath+"//"+ newfileName;
            File upFile = new File(resourcesPath);
            try {
                fileUpload.transferTo(upFile);
                list.add(newfileName);
                data.put("imgUrl",list);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (data.isEmpty()){
            return Result.fail("上传文件不能为空");
        }
        return Result.success(data);
    }
}

2.UploadController

0aabd34aeacb481e9155e580ca722973.png

设置路径

@Value("${wenjun.path}")
private String basePath;
/**
     * 单个文件&图片上传本地
     * @param file
     * @return
     */
    @ApiOperation(value = "单个文件本地", notes = "", httpMethod = "POST", response = Response.class)
    @ApiImplicitParams({
            @ApiImplicitParam(name="file", value="单个文件本地", required = true),
    })
    @PostMapping("/Upload")
    public Result<String> upload(MultipartFile file){
       return UploadFile.upload(file,basePath);
    }

    /**
     * 上传多个文件本地
     * @param files
     * @return
     */
    @ApiImplicitParams({@ApiImplicitParam(name="files", value="上传多个文件本地", required = true)})
    @ApiOperation(value = "上传多个文件本地", notes = "", httpMethod = "POST", response = Response.class)
    @PostMapping("/UploadList")
    public Result<Map<String, Object>> UploadList(MultipartFile[] files){
        return UploadFile.UploadList(files,basePath);
    }

上传服务器

1.TencentCOSUploadFileUtil

package com.takeout.config;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.region.Region;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * @Description 上传腾讯云,对象存储
 * @Param null
 * @Return {@link null}
 * @Author wenjun
 * @Date 2023/9/26 14:23
 */
public class TencentCOSUploadFileUtil {
    // 存储桶名称
    private static final String BUCKET_NAME = "xxxxxxxx";
    //secretId 秘钥id
    private static final String SECRET_ID = "xxxxxxxxx";
    //SecretKey 秘钥
    private static final String SECRET_KEY = "xxxxxxxxx";
    // 腾讯云 自定义文件夹名称
    private static final String PREFIX = "/test/";
    // 访问域名
    public static final String URL = "https://xxxxxxx";
    // 创建COS 凭证
    private static final COSCredentials credentials = new BasicCOSCredentials(SECRET_ID,SECRET_KEY);
    // 配置 COS 区域 就购买时选择的区域 我这里是 南京(nanjing)
    private static final ClientConfig clientConfig = new ClientConfig(new Region("ap-nanjing"));

    /**
     * @methodName uploadfile
     * @effect:上传单文件
     */
    public static String uploadfile(MultipartFile file){
        // 创建 COS 客户端连接
        COSClient cosClient = new COSClient(credentials,clientConfig);
        // 避免文件覆盖,获取文件的原始名称,如123.jpg,然后通过截取获得文件的后缀,也就是文件的类型
        String fileName = file.getOriginalFilename();
        try {
            assert fileName != null;
            //获取文件的类型
            String substring = fileName.substring(fileName.lastIndexOf("."));
            File localFile = File.createTempFile(String.valueOf(System.currentTimeMillis()),substring);
            file.transferTo(localFile);
            Random random = new Random();
            fileName =PREFIX+random.nextInt(10000)+System.currentTimeMillis()+substring;
            // 将 文件上传至 COS
            PutObjectRequest objectRequest = new PutObjectRequest(BUCKET_NAME,fileName,localFile);
            cosClient.putObject(objectRequest);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            cosClient.shutdown();
        }
        return URL+fileName;
    }

    //上传多个文件
    public static Object uploadfiles(MultipartFile[] files){
        List list=new ArrayList<>();
        for (MultipartFile fileUpload:files){
            // 创建 COS 客户端连接
            COSClient cosClient = new COSClient(credentials,clientConfig);
            // 避免文件覆盖,获取文件的原始名称,如123.jpg,然后通过截取获得文件的后缀,也就是文件的类型
            String fileName = fileUpload.getOriginalFilename();
            try {
                assert fileName != null;
                //获取文件的类型
                String substring = fileName.substring(fileName.lastIndexOf("."));
                File localFile = File.createTempFile(String.valueOf(System.currentTimeMillis()),substring);
                fileUpload.transferTo(localFile);
                Random random = new Random();
                fileName =PREFIX+random.nextInt(10000)+System.currentTimeMillis()+substring;
                // 将 文件上传至 COS
                PutObjectRequest objectRequest = new PutObjectRequest(BUCKET_NAME,fileName,localFile);
                cosClient.putObject(objectRequest);
                list.add(URL+fileName);
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                cosClient.shutdown();
            }
        }
        return list;
    }


}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值