使用七牛云做圖片服務(wù)器(Java代碼)

首先得去七牛云注冊(cè)賬號(hào),然后去控制臺(tái)創(chuàng)建存儲(chǔ)空間


6.png

這里申請(qǐng)的是測試域名,所以只有30天的有效期,到期了圖片就會(huì)被清除。所以只是供我們玩一下,真正的開發(fā)得用自己的域名。

接下來就是申請(qǐng)AK和SK,在個(gè)人中心


7.png

做好了這些準(zhǔn)備,那么就可以開始寫代碼了。

我這里使用的是SpringBoot,這樣可以省去很多配置,在這個(gè)項(xiàng)目中,幾乎是零配置。

圖片上傳,這里需要兩個(gè)jar包

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.31</version>
    </dependency>

    <dependency>
        <groupId>com.qiniu</groupId>
        <artifactId>qiniu-java-sdk</artifactId>
        <version>7.2.7</version>
    </dependency>

接下來就開始擼代碼了。

首先創(chuàng)建一個(gè)html頁面

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="/testUpload" method="post" enctype="multipart/form-data">
        <input type="file" name="file" />
        <button type="submit">上傳</button>
    </form>
    
</body>
</html>

最簡單原始。但這里還是有兩個(gè)注意的地方,一個(gè)是method屬性,一個(gè)是enctype屬性。

接下來就是FileUtil.java

public class FileUtil {

    // 圖片允許的后綴擴(kuò)展名
    public static String[] IMAGE_FILE_EXTD = new String[] { "png", "bmp", "jpg", "jpeg","pdf" };

    public static boolean isFileAllowed(String fileName) {
        for (String ext : IMAGE_FILE_EXTD) {
            if (ext.equals(fileName)) {
                return true;
            }
        }
        return false;
    }
}

這個(gè)類只有一個(gè)簡單的方法,那就是判斷圖片的后綴是否符合要求。

接下來寫QiniuService.java

@Service
public class QiniuService {

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

    // 設(shè)置好賬號(hào)的ACCESS_KEY和SECRET_KEY
    String ACCESS_KEY = "###################";
    String SECRET_KEY = "###################";
    // 要上傳的空間
    String bucketname = "####";

    // 密鑰配置
    Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
    // 構(gòu)造一個(gè)帶指定Zone對(duì)象的配置類,不同的七云牛存儲(chǔ)區(qū)域調(diào)用不同的zone
    Configuration cfg = new Configuration(Zone.zone0());
    // ...其他參數(shù)參考類注釋
    UploadManager uploadManager = new UploadManager(cfg);

    // 測試域名,只有30天有效期
    private static String QINIU_IMAGE_DOMAIN = "http://############/";

    // 簡單上傳,使用默認(rèn)策略,只需要設(shè)置上傳的空間名就可以了
    public String getUpToken() {
        return auth.uploadToken(bucketname);
    }

    public String saveImage(MultipartFile file) throws IOException {
        try {
            int dotPos = file.getOriginalFilename().lastIndexOf(".");
            if (dotPos < 0) {
                return null;
            }
            String fileExt = file.getOriginalFilename().substring(dotPos + 1).toLowerCase();
            // 判斷是否是合法的文件后綴
            if (!FileUtil.isFileAllowed(fileExt)) {
                return null;
            }

            String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
            // 調(diào)用put方法上傳
            Response res = uploadManager.put(file.getBytes(), fileName, getUpToken());
            // 打印返回的信息
            if (res.isOK() && res.isJson()) {
                // 返回這張存儲(chǔ)照片的地址
                return QINIU_IMAGE_DOMAIN + JSONObject.parseObject(res.bodyString()).get("key");
            } else {
                logger.error("七牛異常:" + res.bodyString());
                return null;
            }
        } catch (QiniuException e) {
            // 請(qǐng)求失敗時(shí)打印的異常的信息
            logger.error("七牛異常:" + e.getMessage());
            return null;
        }
    }
}

這里需要填的地方我都用#########標(biāo)注了,要注意的是Zone.zone0()這個(gè)方法,因?yàn)槟銊?chuàng)建的存儲(chǔ)空間可能是華北的,華東的或者其他區(qū)域的,所以這里可能得調(diào)用zone1或者zone2。具體視情況而定。

最后當(dāng)然就是controller了。

@Controller
public class TestController {
    
    @Autowired
    private QiniuService qiniuService;
    
    @RequestMapping(value = "/testUpload", method = RequestMethod.POST)
    @ResponseBody
    public String uploadImage(@RequestParam("file") MultipartFile file,HttpServletRequest request) {
        
        if(file.isEmpty()) {
            return "error";
        }
        
        try {
            String fileUrl=qiniuService.saveImage(file);
            return "success, imageUrl = " + fileUrl;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "fail";
    }
}

上傳成功,則返回圖片的地址。

啟動(dòng)SpringBoot項(xiàng)目,輸入地址


9.png

選擇一張圖片點(diǎn)擊上傳,發(fā)現(xiàn)返回success和圖片的url。


8.png

去七牛云存儲(chǔ)空間看內(nèi)容管理,發(fā)現(xiàn)圖片已經(jīng)上傳到了七牛云。

10.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、總目錄 1,資源主頁 資源主頁:用于添加七牛各個(gè)產(chǎn)品模塊,包含有:對(duì)象存儲(chǔ)、自定義數(shù)據(jù)處理V2、多媒體處理、融...
    森林死了一只熊閱讀 2,456評(píng)論 0 4
  • 最進(jìn)在做網(wǎng)站的后臺(tái)管理功能,需要能夠?qū)?shù)據(jù)庫的文章進(jìn)行“增,刪,改,查”,但是遇到了圖片保存的問題,如果采用前端上...
    xujingguo閱讀 9,310評(píng)論 10 44
  • 最近用到七牛上傳視頻和圖片的功能,于是去七牛官網(wǎng)看了文檔,寫了一個(gè)上傳文件到七牛的demo,順便將寫的過程中踩的一...
    陌上疏影涼閱讀 18,101評(píng)論 7 24
  • 佛教講的五毒,不是世間的五種毒藥,而是指貪、嗔、癡、慢、疑五種習(xí)性,這五種習(xí)性會(huì)像五種毒藥一樣,障礙我們的本性,使...
    張shilian閱讀 233評(píng)論 0 0
  • 早上五點(diǎn)45起床,七點(diǎn)半開始早讀。培生五本新書(ling and the turtle、elephant w...
    桃子?jì)宊peach閱讀 212評(píng)論 0 0

友情鏈接更多精彩內(nèi)容