spring mvc java中对接oss(图片服务)

首先你得在阿里云购买oss服务

1:前端

<body>
 <form:form action="/addMyPicture">
     <img id="image" src="">
     <span>选择文件</span>
     <input type="file" id="file" required="required"><br>
     <span>描述</span>
     <textarea id="description" required="required"></textarea>
     <input type="submit" name="提交" onclick="addMyPicture()">
 </form:form>
</body>
function addMyPicture() {
       var imageUrl = $("#image")[0].src;
       if(imageUrl == null || imageUrl == "" || imageUrl == undefined){
         alert("图片不存在");
         return;
       }else {
           imageUrl = imageUrl;
       }
       var data = {
         'url': imageUrl,
         'description' : $("#description").val()
       }
       postWithLoadingMask("/addMyPicture",data,function (res) {
           if(res.status == 1){
               console.log("success");
              alert("result->:"+res);
             
           }
       },function (error) {
           console.log("error",error);
       });
   }

2:controller

  @RequestMapping(value ="upload",method = RequestMethod.POST)
  public String upload(HttpServletRequest req, HttpServletResponse res){
    String imageUrl = "/images";
    String realsavepath = req.getSession().getServletContext().getRealPath(imageUrl);
    File savedir = new File(realsavepath);
    // 如果目录不存在就创建
    if (!savedir.exists()) {
      savedir.mkdirs();
    }
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) req;
    MultipartFile multipartFile = multipartRequest.getFile("file");
    String suffix = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));
    String logImageName = UUID.randomUUID().toString()+suffix;// 构建文件名称
    /** 拼成完整的文件保存路径加文件* */

    String fileName = realsavepath + File.separator + logImageName;

    File file = new File(fileName);
    try {
      multipartFile.transferTo(file);
      fileName= fileUploadHelper.uploadObject2OSS(file);
    } catch (IllegalStateException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return fileName;
  }

3.service

package com.hyc.util;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import org.springframework.stereotype.Service;
import java.io.*;
import java.util.UUID;

@Service
public class FileUploadHelper {

    //阿里云API的内或外网域名
    private static String ENDPOINT;
    //阿里云API的密钥Access Key ID
    private static String ACCESS_KEY_ID;
    //阿里云API的密钥Access Key Secret
    private static String ACCESS_KEY_SECRET;
    // BUCKET
    private static String BUCKETNAME;
  //图片文件夹
  private static String PREFIX;
    //图片网址
  private static String DOMAIN;

    static {
        ENDPOINT = "地区"; //如 oss-ap-southeast-1.aliyuncs.com
        BUCKETNAME = "bucketName";  // 你在阿里云建的bucket Name
        ACCESS_KEY_ID = "LTAIFqNkQIQFJpJg";
        ACCESS_KEY_SECRET = "WKAwc8HpE9shMxzGvDdLbSrJhdruAx";
        PREFIX = "images/";
        DOMAIN = "域名";
    }

    public static final OSSClient getOSSClient(){
        return new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET) ;
    }

    public static final String uploadObject2OSS(File file) {
        OSSClient client = getOSSClient();
        String resultStr = null;
        try {
            InputStream is = new FileInputStream(file);
            String fileName = file.getName();
            Long fileSize = file.length();
            //创建上传Object的Metadata
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setContentLength(is.available());
            metadata.setCacheControl("no-cache");
            metadata.setHeader("Pragma", "no-cache");
            metadata.setContentEncoding("utf-8");
            metadata.setContentType(getContentType(fileName));
            metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");
            //上传文件
            PutObjectRequest request = new PutObjectRequest(BUCKETNAME, PREFIX + fileName, is, metadata);
            client.putObject(request);
            resultStr = DOMAIN+"/"+PREFIX+ fileName;
        } catch (Exception e) {
      e.printStackTrace();
        }
        return resultStr;
    }

    /**
     * 通过文件名判断并获取OSS服务文件上传时文件的contentType
     * @param fileName 文件名
     * @return 文件的contentType
     */
    public static final 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(".jpg".equalsIgnoreCase(fileExtension)) return "image/jpg";
        if(".png".equalsIgnoreCase(fileExtension)) return "image/png";
        if(".jpeg".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 "text/html";
    }

}


没事记录一下

猜你喜欢

转载自my.oschina.net/hycky/blog/1820114
今日推荐