正在写一个博客系统,需要使用到图片上传功能,但是由于服务器性能太差,直接上传到云服务器需要的时间会让人失去理智,所以找了一个其它云服务商提供的对象存储服务,看到七牛云有10G免费空间,已能满足需求,所以就动手了

直接上代码:
首先是一个上传文件的form表单,比较简陋,一个文件选框,一个按钮,搞定

        <form action="/test/getToken" method="post" enctype="multipart/form-data">
            <input name="imageFile" type="file">
            <input type="submit" value="上传">
        </form>

接下来是java部分的代码:
首先上maven依赖(官方文档让装这么多的 ):

  <!--七牛云依赖-->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>[7.3.0, 7.3.99]</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.14.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>happy-dns-java</artifactId>
            <version>0.1.6</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--七牛云依赖-->

依赖搞完,上控制类代码:

@RestController
@RequestMapping("/upload")
public class UploadController {
    @RequestMapping("")
    public R<Void> get(@RequestParam("imageFile") MultipartFile multipartFile) {
        //AK 从https://portal.qiniu.com/user/key获取
        String accessKey = "57THhc6zpcwkT4I4t***********************";
        //SK 和AK在同一地方获取
        String secretKey = "uiUdVCl64yiAEM6Bx***********************";
        //bucket 自己创建的存储空间名
        String bucket = "rjgl";
        //Configuration 构造方法中的参数是指定上传到哪里的服务器,可以不指定即无参,我指定的是华南地区服务器
        Configuration cf = new Configuration(Region.huanan());
        UploadManager um = new UploadManager(cf);
        //创建上传token
        Auth auth = Auth.create(accessKey, secretKey);
        String token = auth.uploadToken(bucket);
        Response response = null;
        try {
            // 上传 并返回结果
            // put 方法的三个参数:
            //                 要上传的数据的字节数组       上传存储的文件名(我的是按文件原名存储)    token
            response = um.put(multipartFile.getBytes(), multipartFile.getOriginalFilename(), token);
        } catch (QiniuException e) {
            throw new UploadException("服务器错误!请稍后再试!");
        } catch (IOException e) {
            throw new UploadException("服务器错误!请稍后再试!");
        }
        //上传结果状态码为200表示上传成功 否则失败
        if (response.statusCode==200){
            return R.ok();
        }else {
            return R.fail(R.State.ERR_UNKNOWN,new Throwable("上传失败!未知错误!"));
        }
    }
}

至此,完了。
奥,springboot默认上传大小限制是1M,太小了,该大一点吧:
(改到了5MB)

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //  单个数据大小
        factory.setMaxFileSize(DataSize.parse("5MB"));
        /// 总上传数据大小
        return factory.createMultipartConfig();
    }

最后,测试,成功!
总结:官方文档看的我好乱~这么点代码硬是看了一下午才写出来~ 始终菜是原罪,还得继续学!