spring boot 及editor.md上传阿里云OSS存储图片

FileController .java


import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.PutObjectRequest;
import life.majiang.community.community.dto.FileDTO;
import life.majiang.community.community.util.AliyunOssConfigConstant;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import java.util.UUID;

/**
 * 处理文件上传
 */
@Controller
public class FileController {
    private static String bucketName = AliyunOssConfigConstant.BUCKE_NAME;
    private static String endPoint = AliyunOssConfigConstant.END_POINT;
    private static String accessKeyId = AliyunOssConfigConstant.AccessKey_ID;
    private static String accessKeySecret = AliyunOssConfigConstant.AccessKey_Secret;


    @ResponseBody
    @RequestMapping("/file/upload")
    public FileDTO upload(HttpServletRequest request){
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
        MultipartFile file = multipartRequest.getFile("editormd-image-file");
        String realPath = System.getProperty("user.dir");
        realPath+="\\target\\classes\\static\\images\\";
        File folder = new File(realPath);
        OSS ossClient = new OSSClientBuilder().build(endPoint,accessKeyId ,accessKeySecret);
        //文件重命名
        String oldFile = file.getOriginalFilename();
        String newFile = UUID.randomUUID().toString()+oldFile.substring(oldFile.lastIndexOf("."),oldFile.length());
        String url;
        FileDTO fileDTO = null;
        try {
            //拼接url
            url = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/images/"+newFile;
            fileDTO = new FileDTO();
            fileDTO.setSuccess(1);
            StringBuilder sb = new StringBuilder(url);
            sb.replace(4,5,"%3A");
            sb.replace(24,25,"%3A");
            //阿里云图片保存URL
            fileDTO.setUrl("https://xxxxxxx.oss-cn-shenzhen.aliyuncs.com/"+sb);

            // 上传文件流。
            InputStream inputStream = new FileInputStream(folder+"/"+newFile);
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, url,inputStream);
            ossClient.putObject(putObjectRequest);
            return fileDTO;
            
        }catch (Exception e){
            fileDTO.setSuccess(0);
            e.printStackTrace();
        }finally {
            ossClient.shutdown();
        }
        return null;
    }


}






AliyunOssConfigConstant .java

public class AliyunOssConfigConstant {
    private AliyunOssConfigConstant(){}

    //阿里云仓库名称
    public static final String BUCKE_NAME = "xxxxxxxxxxxxxxxx";
    //地域节点,END_POINT以杭州为例,其它Region请按实际情况填写。
    public static final String END_POINT = "http://oss-cn-hangzhou.aliyuncs.com";
    //AccessKey ID
    public static final String AccessKey_ID = "xxxxxxxxxxxxx";
    //Access Key Secret
    public static final String AccessKey_Secret = "xxxxxxxxxxxxxx";
}

FileDTO .java

public class FileDTO {
    private int success;
    private String message;
    private String url;



    public int getSuccess() {
        return success;
    }

    public void setSuccess(int success) {
        this.success = success;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

publish.html 在from标签里面,必须有submit

 <div class="form-group" id="question-editor">
                    <label for="description">问题补充(必填,请参照右侧提示):</label>
                    <textarea name="description"  th:text="${description}" id="description" style="display: none"
                              class="form-control" cols="30" rows="10"></textarea>
                </div>
                <script type="text/javascript">
                    $(function () {
                        var editor =editormd("question-editor",{
                            width: "100%",
                            height: 350,
                            path : "/js/lib/",
                            imageUpload: true,
                            imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
                            imageUploadURL: "/file/upload"
                        });
                    });
                </script>

question.html

<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" id="question-view"  >
                    <textarea style="display: none;" th:text="${question.description}"></textarea>
                </div>
                <script>
                    $(function () {
                        editormd.markdownToHTML("question-view",{});
                    });
                </script>

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值