zoukankan      html  css  js  c++  java
  • 七牛云图片上传

    1.需要在maven中引入依赖,这些依赖可以去,maven repository的官网中下载

     <dependency>
                    <groupId>commons-fileupload</groupId>
                    <artifactId>commons-fileupload</artifactId>
                    <version>1.3.1</version>
                </dependency>
                <dependency>
                    <groupId>org.quartz-scheduler</groupId>
                    <artifactId>quartz</artifactId>
                    <version>2.2.1</version>
                </dependency>
                <dependency>
                    <groupId>org.quartz-scheduler</groupId>
                    <artifactId>quartz-jobs</artifactId>
                    <version>2.2.1</version>
                </dependency>
                <dependency>
                    <groupId>com.sun.jersey</groupId>
                    <artifactId>jersey-client</artifactId>
                    <version>1.18.1</version>
                </dependency>
                <dependency>
                    <groupId>com.qiniu</groupId>
                    <artifactId>qiniu-java-sdk</artifactId>
                    <version>7.2.0</version>
                </dependency>

    2.准备好七牛云的工具类

    import com.qiniu.storage.BucketManager;
    import com.qiniu.util.Auth;
    import com.qiniu.util.Base64;
    import com.qiniu.util.StringMap;
    import com.qiniu.util.UrlSafeBase64;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.RequestBody;
    
    
    /**
     * 七牛云工具类
     */
    public class QiNiuUtils {
        public  static String accessKey = "qSy8fAAmBX9xeTkTOaRbEFsuC4AWEtA_f2W21Dga";
        public  static String secretKey = "KcM3XV7trf5bUJN8mJnDWDQX4K5GgLUZo2kF4rwM";
        public  static String bucket = "kobo1005";
        // 密钥
        private static final Auth auth = Auth.create(accessKey, secretKey);
    
        //新建空间时,七牛云分配出的域名 (自己可在万网购买域名解析后,绑定到加速域名)
        private static final String DOMAIN = "qscqh6z76.hn-bkt.clouddn.com";
    
        public static String getUpToken() {
            return auth.uploadToken(bucket, null, 3600, new StringMap().put("insertOnly", 1));
        }
    
        //base64方式上传
        public static String put64image(byte[] base64, String key) throws Exception {
            String file64 = Base64.encodeToString(base64, 0);
            Integer len = base64.length;
    
            //华北空间使用 upload-z1.qiniu.com,华南空间使用 upload-z2.qiniu.com,北美空间使用 upload-na0.qiniu.com
            String url = "http://upload-z2.qiniu.com/putb64/" + len + "/key/" + UrlSafeBase64.encodeToString(key);
    
            RequestBody rb = RequestBody.create(null, file64);
            Request request = new Request.Builder()
                    .url(url)
                    .addHeader("Content-Type", "application/octet-stream")
                    .addHeader("Authorization", "UpToken " + getUpToken())
                    .post(rb).build();
            OkHttpClient client = new OkHttpClient();
            okhttp3.Response response = client.newCall(request).execute();
            System.out.println(response);
            //返回图片地址   https://q5jhgxz4q.bkt.clouddn.com/812bbd78-62d3-44bc-836c-9ee27ba4866a
            //用此地址可在网页中访问到上传的图片
            return key;
        }
    
        /**
         * @param key 图片的文件名
         * @Explain 删除空间中的图片
         */
        public static void delete(String key) {
            BucketManager bucketManager = new BucketManager(auth,  null);
            try {
                bucketManager.delete(bucket, key);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    3.element ui前端和vue前端代码

    <el-form-item label="上传图片" :span="24">
                                                    <el-upload
                                                            action="/Setmeal/upload.do"
                                                            name="imgFile"
                                                            list-type="picture-card"
                                                            :on-success="handleAvatarSuccess"
                                                            :before-upload="beforeAvatarUpload"
                                                            :on-preview="handlePictureCardPreview"
                                                            :on-remove="handleRemove">
                                                        <img width="100%" :src="formData.img" alt=""/>
                                                        <i class="el-icon-plus"></i>
                                                    </el-upload>
                                                </el-form-item>

    4.vue data中定义的属性

     dialogVisible: false,
                autoUpload:true,//自动上传
                activeName:'first',//添加/编辑窗口Tab标签名称
                dialogImageUrl:"http://qscqh6z76.hn-bkt.clouddn.com/",//模型数据,用于上传图片完成后图片预览

    5.vue 中的methods 定义的方法

      handleRemove(file, fileList) {
                    console.log(file, fileList);
                },
                handlePictureCardPreview(file) {
                    console.log(file.url)
                    this.img = file.url;
                    this.dialogVisible = true;
                },
                handleAvatarSuccess(response, file) {
                    //提示成功或失败,要回显图片
                    this.$message({
                        message: response.message,
                        type: response.flag ? "success" : "error"
                    })
                    if(response.flag){
                        // 回显图片
                        //this.imageUrl = response.data.domain + response.data;
    
                        this.dialogImageUrl = this.dialogImageUrl + response.data.data;
                        // 表单中没有img参数,后台数据库用的就是img字段,补上它的值
                        // 前端中的json数据 {key,value}=> map,
                        // 对象.属性名(不存在) => map.put(不存在的key,value)
                    }
                },
                //上传图片之前执行
                beforeAvatarUpload(file) {
                    question = confirm("确定要直接上传嘛?");
                    if(question){
                        const isJPG = file.type === 'image/jpeg';
                        const isLt2M = file.size / 1024 / 1024 < 2;
                        if (!isJPG) {
                            this.$message.error('上传套餐图片只能是 JPG 格式!');
                        }
                        if (!isLt2M) {
                            this.$message.error('上传套餐图片大小不能超过 2MB!');
                        }
                        return isJPG && isLt2M;
                    }else {
                        this.$message({
                            type: 'info',
                            message: '已取消'
                        })
                        return false;
                    }
                },

    6.element ui前端和vue 与后台交互 controller 方法

     @RequestMapping(value = "/upload",method= RequestMethod.POST)
        public Result uploadImg(@RequestParam MultipartFile imgFile) {
    
            try {
                byte[] bytes = imgFile.getBytes();
                imageName = UUID.randomUUID().toString();
    
                String s = QiNiuUtils.put64image(bytes, imageName);
                System.out.println("s = " + s);
    
                return new Result(true, MessageConstant.PIC_UPLOAD_SUCCESS,s);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return new Result(false, MessageConstant.PIC_UPLOAD_FAIL);
        }

     如果还有疑问的小伙伴 可以私信或留言在下方

  • 相关阅读:
    浅谈servlet源码
    移动端测试的8大过程
    Pc端微信加群和app端加群测试用例设计点
    视频播放的用例设计点
    发红包的测试用例设计点
    朋友圈点赞用例设计点
    ADB
    语音 小说 逻辑
    nginx
    Jenkins—安装与简单使用
  • 原文地址:https://www.cnblogs.com/KcBlog/p/14799102.html
Copyright © 2011-2022 走看看