Java实现文件上传和文件上传到OSS服务器

一,实现文件上传(图片,文件,音视频)

普通的上传

@Override
public Object uploadImage(MultipartFile file) {
    //获取文件名
    String originalFilename = file.getOriginalFilename();
    //获取文件后缀名
    String substring = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
    System.out.println(substring);
    //使用时间戳改变文件名
    String fileName = System.currentTimeMillis()+"."+substring;
    String filePath = "E:\\data\\";
    String fileUrl = filePath+fileName;
    File dest = new File(fileUrl);
    //判断是否存在此目录,不存在则创建此目录
    if (!dest.getParentFile().exists()){
        dest.getParentFile().mkdirs();
    }
    try {
        file.transferTo(dest);
    }catch (Exception e){
        e.printStackTrace();
        return CommonResult.failed(originalFilename+"上传失败!");
    }
    return CommonResult.success("上传成功!  "+fileUrl);
}

二,文件上传到OSS服务器

需要引入的依赖

<!--OSS-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>2.4.0</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>1.1.3</version>
        </dependency>

具体的代码,不包含业务逻辑

 @Override
    public Object uploadImageOss(MultipartFile file) throws Exception {
        // Endpoint以北京为例,其它Region请按实际情况填写。
        String endpoint = "http://oss-cn-beijing.aliyuncs.com";
        // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = "xxxxxxxx";
        String accessKeySecret = "xxxxxxx";
        //创建的bucket名
        String bucketName = "xxxxxx";
		//获取文件名
        String originalFilename = file.getOriginalFilename();
        //获取文件后缀名
        String substring = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
        //使用uuid作为文件名防止重复
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        String fileName = uuid+"."+substring;
        final File tempFile = File.createTempFile(uuid, substring);
        //MultipartFile  转换为 File
        file.transferTo(tempFile);
        // 创建OSSClient实例。
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
        try {
            //容器不存在,就创建
            if(! ossClient.doesBucketExist(bucketName)){
                ossClient.createBucket(bucketName);
                CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
                createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
                ossClient.createBucket(createBucketRequest);
            }
            String fileHost = "upload";
            //上传文件
            //File file1 = multipartFileToFile(file);
            //创建文件路径
            String fileUrl= fileHost+"/"+fileName;
            PutObjectResult result = ossClient.putObject(new PutObjectRequest(bucketName, fileUrl, tempFile));
            //设置权限 这里是公开读
            ossClient.setBucketAcl(bucketName,CannedAccessControlList.PublicRead);
            if(null != result){
                log.info("==========>OSS文件上传成功,OSS地址:"+fileUrl);
                return CommonResult.success(fileUrl);
            }
        }catch (OSSException oe){
            log.error(oe.getMessage());
        }catch (ClientException ce){
            log.error(ce.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭
            ossClient.shutdown();
        }
        //删除临时生成的文件
        deleteFile(tempFile);
        return null;
    }

    /**
     * 删除
     *
     * @param files
     */
    private void deleteFile(File... files) {
        for (File file : files) {
            if (file.exists()) {
                file.delete();
            }
        }
    }
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 可以使用 ImageIO 类来读取 jpg 文件,将其转换为 BufferedImage 对象并缓存在内存中。然后,可以使用 OSS SDK 提供的 PutObjectRequest 类上传该对象到 OSS 服务器。 以下是示例代码: ```java import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import javax.imageio.ImageIO; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.PutObjectRequest; public class UploadJpgToOSS { public static void main(String[] args) { String endpoint = "yourEndpoint"; // oss 服务器地址 String accessKeyId = "yourAccessKeyId"; // accessKeyId String accessKeySecret = "yourAccessKeySecret"; // accessKeySecret String bucketName = "yourBucketName"; // 存储空间名称 String objectName = "yourObjectName"; // 对象名称 String filePath = "yourFilePath"; // jpg 文件路径 // 创建 OSS 客户端 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { // 读取 jpg 文件并缓存到内存中 BufferedImage image = ImageIO.read(new File(filePath)); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, "jpg", baos); byte[] bytes = baos.toByteArray(); // 上传缓存在内存中的 jpg 文件到 OSS 服务器 PutObjectRequest request = new PutObjectRequest(bucketName, objectName, bytes); ossClient.putObject(request); System.out.println("Upload jpg to OSS successfully!"); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭 OSS 客户端 ossClient.shutdown(); } } } ``` 在以上示例代码中,需要将 `yourEndpoint`、`yourAccessKeyId`、`yourAccessKeySecret`、`yourBucketName`、`yourObjectName` 和 `yourFilePath` 替换为实际值。需要注意的是,`yourObjectName` 是上传OSS 服务器后的对象名称,可以根据需要自行设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值