七牛云 Java Web上传图片

本文由黑壳网原创

本文来源mybaits 分页插件 pageHelper5.0.2~黑壳网

壳叔搞笑一刻

没有对手

警官抓到正在赌博的四个人。“你们知道这是犯法的吗?”警官向第一个人怒吼道。
“不,我只是在这里看看。”
警官又问第二个人:“你呢?”
“我是在等候巴士而已。
第三个也插嘴:“警官,我是在这里等我的女朋友。”
警官看了看第四个人,他拿着牌。于是责问他说:“你手中有物证,大概不能抵赖吧?”
他睨视着警官,回答说:“那么我是跟谁赌博呢?你说说看!”

今天要说的是七牛云介绍

今天主要就是在通过Java Web的方式上传图片并且获得图片路径。
先看一下界面,有点简短,请各位将就一下吧。
这是上传页面,没错就是两个按钮。


七牛云 Java Web上传图片_第1张图片

你以为点击完,会出现Duang Duang Duang的效果吗,想多了,只有更剪短的一行img标签显示


七牛云 Java Web上传图片_第2张图片

虽说界面过于清爽,但是功能是实打实的可以!
七牛云 Java Web上传图片_第3张图片

接下来开始抛代码!
单独jar qiniuJar.tar - 城通网盘

maven 引入jar包
  
    
      eu.bitwalker
      UserAgentUtils
      1.20
    

    
    
      com.qiniu
      sdk
      6.1.0
    

    
      com.squareup.okhttp3
      okhttp
      3.3.1
      compile
    
    
      com.google.code.gson
      gson
      2.6.2
      compile
    
html 界面


    七牛云服务示例





Controller类
import com.QiniuCommon.utils.CommonUtil;
import com.QiniuCommon.utils.ExecuteResult;
import com.QiniuCommon.utils.QiniuUtil;
import com.qiniu.api.auth.AuthException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;

/**
 * Created by kzyuan on 2017/6/20.
 */
@Controller
@RequestMapping(value = "")
public class QiniuController {

    private static Logger logger = LoggerFactory.getLogger(QiniuController.class);


    @RequestMapping("qiniuCommon")
    private String qiniuCommon(HttpServletRequest request){
        return "qiniuCommon";
    }


    /**
     * @param request
     * @param multipartFile
     * @return
     */
    @RequestMapping(value = "/qiniuUpload", method = RequestMethod.POST)
    @ResponseBody
    public String qiniuUpload(HttpServletRequest request, HttpServletResponse response, @RequestParam("imagefile") MultipartFile multipartFile) {
        ExecuteResult executeResult = new ExecuteResult();

        QiniuUtil qiniuUtil = new QiniuUtil();
        CommonUtil commonUtil = new CommonUtil();
        try {
            /**
             * 上传文件扩展名
             */
            String filenameExtension = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."), multipartFile.getOriginalFilename().length());

            /**
             * MultipartFile 转 file 类型
             */
            File file = commonUtil.multipartToFile(multipartFile);

            /**
             * 七牛云文件上传 服务  file文件 以及 文件扩展名
             */
            executeResult = qiniuUtil.uploadFile(file, filenameExtension);
            if (!executeResult.isSuccess()) {
                return "失败" + executeResult.getErrorMessages();
            }

        } catch (AuthException e) {
            logger.error("AuthException", e);
        }

        return executeResult.getResult();
    }

}
common.properties 配置文件
#一些公共的配置

#七牛云存储空间名
bucketName= 
#七牛云绑定域名
domain= 
#七牛云服务配置项 账号的ACCESS_KEY和SECRET_KEY
ACCESS_KEY= 
SECRET_KEY= 
这是综合各种例子,最后总结出的一个比较完全的工具类
import com.qiniu.api.auth.AuthException;
import com.qiniu.api.auth.digest.Mac;
import com.qiniu.api.io.IoApi;
import com.qiniu.api.io.PutExtra;
import com.qiniu.api.io.PutRet;
import com.qiniu.api.rs.GetPolicy;
import com.qiniu.api.rs.PutPolicy;
import com.qiniu.api.rs.RSClient;
import com.qiniu.api.rs.URLUtils;
import org.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * 七牛云 手写工具类
 * Created by kzyuan on 2017/6/20.
 */
public class QiniuUtil {

    private static Logger logger = LoggerFactory.getLogger(QiniuUtil.class);

    PropertyUtil propertyUtil = new PropertyUtil();
    private String bucketName = propertyUtil.getProperty("bucketName");
    private String domain = propertyUtil.getProperty("domain");
    private String ACCESS_KEY = propertyUtil.getProperty("ACCESS_KEY");
    private String SECRET_KEY = propertyUtil.getProperty("SECRET_KEY");

    //通过文件路径上传文件
    public ExecuteResult uploadFile(String localFile) throws AuthException, JSONException {
        File file = new File(localFile);
        /**
         * 文件后缀名 文件扩展名
         */
        String filenameExtension = localFile.substring(localFile.lastIndexOf("."), localFile.length());
        return uploadFile(file, filenameExtension);
    }

    //通过File上传
    public ExecuteResult uploadFile(File file, String filenameExtension) throws AuthException, JSONException {
        ExecuteResult executeResult = new ExecuteResult();
        String uptoken = getUpToken();

        // 可选的上传选项,具体说明请参见使用手册。
        PutExtra extra = new PutExtra();
        SimpleDateFormat time = new SimpleDateFormat("yyyy/MM/dd");
        // 上传文件
        PutRet ret = IoApi.putFile(uptoken, time.format(new Date()) + "/" + UUID.randomUUID() + filenameExtension, file.getAbsolutePath(), extra);

        if (ret.ok()) {
            executeResult.setSuccessMessage("上传成功!");
            executeResult.setResult(domain+ret.getKey());
        } else {
            executeResult.addErrorMessage("上传失败");
        }
        return executeResult;
    }

    /**
     * 从 inputstream 中写入七牛
     *
     * @param key     文件名
     * @param content 要写入的内容
     * @return
     * @throws AuthException
     * @throws JSONException
     */
    public boolean uploadFile(String key, String content) throws AuthException, JSONException {
        // 读取的时候按的二进制,所以这里要同一
        ByteArrayInputStream inputStream = new ByteArrayInputStream(content.getBytes());

        String uptoken = getUpToken();

        // 可选的上传选项,具体说明请参见使用手册。
        PutExtra extra = new PutExtra();

        // 上传文件
        PutRet ret = IoApi.Put(uptoken, key, inputStream, extra);

        if (ret.ok()) {
            return true;
        } else {
            return false;
        }
    }

    //获得下载地址
    public String getDownloadFileUrl(String filename) throws Exception {
        Mac mac = getMac();
        String baseUrl = URLUtils.makeBaseUrl(domain, filename);
        GetPolicy getPolicy = new GetPolicy();
        String downloadUrl = getPolicy.makeRequest(baseUrl, mac);
        return downloadUrl;
    }

    //删除文件
    public void deleteFile(String filename) {
        Mac mac = getMac();
        RSClient client = new RSClient(mac);
        client.delete(domain, filename);
    }

    //获取凭证
    private String getUpToken() throws AuthException, JSONException {
        Mac mac = getMac();
        PutPolicy putPolicy = new PutPolicy(bucketName);
        String uptoken = putPolicy.token(mac);
        return uptoken;
    }

    private Mac getMac() {
        Mac mac = new Mac(ACCESS_KEY, SECRET_KEY);
        return mac;
    }

}
这个工具类注释说的很清楚,其实就是将MultipartFile 转换成File的一个过程
import org.apache.commons.fileupload.disk.DiskFileItem;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * 公共工具类
 * Created by kzyuan on 2017/6/19.
 */
public class CommonUtil {

    /**
     * MultipartFile 转换成File
     *
     * @param multfile 原文件类型
     * @return File
     * @throws IOException
     */
    public File multipartToFile(MultipartFile multfile) {

        CommonsMultipartFile cf = (CommonsMultipartFile)multfile;
        //这个myfile是MultipartFile的
        DiskFileItem fi = (DiskFileItem) cf.getFileItem();
        File file = fi.getStoreLocation();
        return file;
    }

}

如果以上你觉得还是有点迷糊,那么GitHub代码 是你的首选。

你可能感兴趣的:(七牛云 Java Web上传图片)