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文本,可以直接粘贴使用。