md技巧-配置自己的图床(两种方式)

Markdown是一种轻量级标记语言,可以通过简单的标记使文本具有雅观的格式,让你更加专心与写作。如果说有点让人分心的缺点的话那就是图片上传到图床这个过程了,一般的处理是上传到某个平台,但是可能出现被平台限制出现图片不可用的尴尬。为了避免这种情况出现,我们可以自制图床。

PicGo

PicGo是一款简单易用的图床上传工具,配合对应的图床,能够提高写文体验。使用electron开发,意味着全平台:

一、阿里对象存储OSS +PicGo

进入这里购买套餐。

然后新建Bucket


创建成功后,获取到accessKeyId和accessKeySecret

使用PicGo配置OSS:

java自定义开发实例:

引入SDk
   <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus-boot-starter.version}</version>
        </dependency>
OSS工具类
package com.lingzhenquan.demo.Qroxy.utils;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * @desc:
 * @author: lingzhenquan
 * @时间: 2019-08-22-13:10
 */
@Slf4j
public class AliyunOSSClientUtil {
    public static final String ENDPOINT = "http://oss-cn-shenzhen.aliyuncs.com/";
    public static final String ACCESS_KEY_ID = "";
    public static final String ACCESS_KEY_SECRET = "";
    public static final String FILE_PATH="img/";
    /**
     * 获取阿里云OSS客户端对象
     * @return ossClient
     */
    public static OSSClient getOSSClient(){
        return new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET);
    }
    /**
    *@desc:上传图片到OSS
    *
    *@author:lingzhenquan
    *
    *@date:2019-08-22 13:18
    *
    *@param:
    *
    *@type:
    *
    */
    public  static String uploadObject2OSS( MultipartFile file, String bucketName, String folder){
        String fileName=file.getOriginalFilename();
        String ret;
        ObjectMetadata metadata=new ObjectMetadata();
        OSSClient ossClient=null;
        try {
            metadata.setContentLength(file.getInputStream().available());
            metadata.setCacheControl("no-cache");
            metadata.setContentType(getContentType(fileName));
            metadata.setHeader("Pragma", "no-cache");
            metadata.setContentEncoding("utf-8");
            metadata.setContentDisposition("filename/filesize=" + fileName + "/" + file.getSize() + "Byte.");
             ossClient=AliyunOSSClientUtil.getOSSClient();
           PutObjectResult putObjectResult= ossClient.putObject(bucketName,folder+fileName,file.getInputStream(),metadata);
           ret= putObjectResult.getETag();
        } catch (IOException e) {
          log.error("上传失败:"+e);
            ossClient.shutdown();
            return "上传失败";
        }
        ossClient.shutdown();
        return ret;
    }
  /**
  *@desc: 生成文件夹
  *
  *@author:lingzhenquan
  *
  *@date:2019-08-22 14:12
  *
  *@param:[folder, bucketName]
  *
  *@type:java.lang.String
  *
  */
    public  static String createFileFolder(String folder,String bucketName){
        final String createFolder=folder;
        OSSClient ossClient=AliyunOSSClientUtil.getOSSClient();
        if (!ossClient.doesObjectExist(bucketName,createFolder)){

            ossClient.putObject(bucketName,folder,new ByteArrayInputStream(new byte[0]));
            log.info("创建文件夹成功");
            OSSObject ossObject=ossClient.getObject(bucketName,createFolder);
            return ossObject.getKey();
        }
        return "文件已存在!";
    }
    /**
     * 通过文件名判断并获取OSS服务文件上传时文件的contentType
     * @param fileName 文件名
     * @return 文件的contentType
     */
    public static  String getContentType(String fileName) {
        //文件的后缀名
        String fileExtension = fileName.substring(fileName.lastIndexOf("."));
        if (".bmp".equalsIgnoreCase(fileExtension)) {
            return "image/bmp";
        }
        if (".gif".equalsIgnoreCase(fileExtension)) {
            return "image/gif";
        }
        if (".jpeg".equalsIgnoreCase(fileExtension) || ".jpg".equalsIgnoreCase(fileExtension) || ".png".equalsIgnoreCase(fileExtension)) {
            return "image/jpeg";
        }
        if (".html".equalsIgnoreCase(fileExtension)) {
            return "text/html";
        }
        if (".txt".equalsIgnoreCase(fileExtension)) {
            return "text/plain";
        }
        if (".vsd".equalsIgnoreCase(fileExtension)) {
            return "application/vnd.visio";
        }
        if (".ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension)) {
            return "application/vnd.ms-powerpoint";
        }
        if (".doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension)) {
            return "application/msword";
        }
        if (".xml".equalsIgnoreCase(fileExtension)) {
            return "text/xml";
        }
        //默认返回类型
        return "image/jpeg";

    }
}

二、github +PicGo

也可以使用github做图床。

新建一个Repository

用于存需要上传的图片。这个仓库最好是public。

生产授权token

在Github的Developer setting界面生一个token。记得保存,因为它只会显示一次。

配置PicGo

三、如何使用PicGo

有两种方式:

  • 通过屏幕截图
    截取图片之后,图片会出现在PicGo的待上传列表里面。但是手动点击一下触发上传。成功后链接在粘贴板。

  • 通过面板上传图片
    我们需要将需要使用的图片拖到PicGo的客户端/或点击上传/或点击粘贴板上传手动上传,上传成功之后,会自动复制成markdown文本,可以直接粘贴使用。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×