Java-文件上传

前端页面三要素

<form action="/upload" method="post" enctype="multipart/form-data"> //一定要设置

//以字节形式发送
    姓名: <
input type="text" name="username"><br>
    年龄: <
input type="text" name="age"><br>
    头像: <
input type="file" name="image"><br>
    <
input type="submit" value="提交">
</
form>

后端用MultipartFile类接收

@RestController
public class UploadController {
    @PostMapping("/upload")  
    public Result upload(String username , Integer age,@RequestParam("image")MultipartFile file) {
       
return Result.success();
    }

}

本地存储

@RestController
public class UploadController {
    @PostMapping("/upload")
   
public Result upload(MultipartFile image) throws IOException {
       
//获取原始文件名
       
String originalFilename = image.getOriginalFilename();
       
//构建新的文件名
       
String newFileName = UUID.randomUUID().toString()

+originalFilename.substring(originalFilename.lastIndexOf("."));
       
//将文件保存在服务器端 E:/images/ 目录下
       
image.transferTo(new File("E:/images/"+newFileName));
       
return Result.success();
    }
}

// @PostMapping("/upload2")
// public Result upload(String name, Integer age, MultipartFile image) {
//     String originalFilename = image.getOriginalFilename();
//     System.out.println(originalFilename);
//
//     int lastIndexOf = originalFilename.lastIndexOf(".");
//     System.out.println(lastIndexOf);
//     String substring = originalFilename.substring(lastIndexOf);
//     System.out.println(substring);
//
//     String fileName = UUID.randomUUID().toString() + substring;
//
//     try {
//         image.transferTo(new File("E:/images/", fileName));
//     } catch (IOException e) {
//         return Result.error("上传失败");
//     }
//
//     return Result.success();
// }

MultipartFile类的方法

注意

SpringBoot中,文件上传,默认单个文件允许最大大小为 1M。如果需要上传大文件,可以进行如下配置:

#配置单个文件最大上传大小
spring.servlet.multipart.max-file-size=10MB
#配置单个请求最大上传大小(一次请求可以上传多个文件)
spring.servlet.multipart.max-request-size=100MB

阿里云OSS官方文档地址:

如何安装OSS Java SDK_对象存储 OSS-阿里云帮助中心

阿里云对象存储OSS

<!--   ali  oss-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.1</version>
        </dependency>
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;


import java.io.FileInputStream;
import java.io.InputStream;

public class Oss {
    
    public void testOss(){
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-beijing.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "";
        String accessKeySecret = "";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String objectName = "0001.jpg";
        // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
        // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
        String filePath= "";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            InputStream inputStream = new FileInputStream(filePath);
            // 创建PutObject请求。
            ossClient.putObject(bucketName, objectName, inputStream);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (Exception ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
@Component
public class AliOSSUtils {

    @Autowired
    private AliYunOss aliYunOss;

    // @Value("${aliyun.oss.endpoint}")
    // private String endpoint;
    // @Value("${aliyun.oss.accessKeyId}")
    // private String accessKeyId;
    // @Value("${aliyun.oss.accessKeySecret}")
    // private String accessKeySecret;
    // @Value("${aliyun.oss.bucketName}")
    // private String bucketName;

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        // 上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(aliYunOss.getEndpoint(), aliYunOss.getAccessKeyId(), aliYunOss.getAccessKeySecret());
        // OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(aliYunOss.getBucketName(), fileName, inputStream);
        // ossClient.putObject(bucketName, fileName, inputStream);

        // 文件访问路径
        String url = aliYunOss.getEndpoint().split("//")[0] + "//" + aliYunOss.getBucketName() + "." + aliYunOss.getEndpoint().split("//")[1] + "/" + fileName;
        // String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }
}

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss") //配置文件获取连接信息
public class AliYunOss {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}
@RestController
public class UploadController {

    @Autowired
    private AliOSSUtils aliOSSUtils;

    @PostMapping("/upload")
    public Result uploadOss(MultipartFile image) {
        try {
            String imageUrl = aliOSSUtils.upload(image);
            return Result.success(imageUrl);
        } catch (Exception e) {
            return Result.error("上传失败");
        }

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值