1. 程式人生 > >java圖片上傳-檔案/圖片上傳到七牛

java圖片上傳-檔案/圖片上傳到七牛

java圖片上傳-檔案(圖片)上傳到七牛


一、在配置檔案中引入依賴(注:七牛開發者url:https://developer.qiniu.com/kodo)
<-- 引入依賴 -->
<dependency>
    <groupId>com.qiniu</groupId>
    <artifactId>qiniu-java-sdk</artifactId>
    <version>7.2.6</version>
    <scope>compile</scope>
</dependency>
二、工具類(UploadUtil

 
import java.io.IOException;
import java.io.InputStream;
import com.foriseland.fjf.base.BaseController;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
/**
* @describe 圖片上傳
* @author: LeoD
* @createTime 2018年3月27日 下午12:23:33
*/
public class UploadUtil extends BaseController {
    private static final Logger logger = LoggerFactory.getLogger(UploadUtil.class);
    private static final String ACCESS_KEY = "RGnPGwxZhQGoB-yEx4Yc-40位的key...";
    private static final String SECRET_KEY = "_h6eA9vScnPzhiWAdEa1-40位的key...";
    private static final String BUCKET = "test2";
    public static final String IMG_SUFFIX_LIST = "jpg,jpeg,gif,png,ico,bmp,jpeg";
    public static final String URL = "http://p22kr8qzx.bkt.clouddn.com/";
/**
* 上傳圖片
* @param file
* @return
* @throws IOException
*/
public static String upload(@RequestParam MultipartFile file) {
    if (file == null) {
    logger.warn("上傳檔案為空!");return null;
    }
    InputStream inputStream = null;
    try {
    /** 獲取檔案的字尾* */
        if (!checkFile(file.getOriginalFilename())) {
             logger.warn("上傳檔案型別不支援");
            return null;
        }
        inputStream = file.getInputStream();
        DefaultPutRet ret = qiNiuUpload(inputStream);
        if (null == ret) {
            logger.error("上傳檔案伺服器返回為null");
            return null;
        }
        logger.info("上傳圖片名稱:" + file.getOriginalFilename());
        logger.info("上傳後hash:" + ret.hash);
        logger.info("上傳後key:" + ret.key);
        return URL+"&#&"+ret.hash;
    } catch (QiniuException ex) {
        logger.error("上傳七牛伺服器異常", ex);
    } catch (Exception e) {
        logger.error("上傳異常", e);
    } finally {
    try {
        inputStream.close();
    } catch (IOException e) {
        logger.error("上傳檔案,關閉輸入流異常", e);
    }
   }
    return null;
}
/**
* 檢測圖片檔案型別
* @param fileName
* @return
*/
public static boolean checkFile(String fileName) {
    boolean flag = false;
    String suffix = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
    logger.info("上傳檔案字尾:" + suffix);
    if (IMG_SUFFIX_LIST.contains(suffix.trim().toLowerCase())) {
        flag = true;
    }
    return flag;
}
/**
* 上傳七牛伺服器
* @param is
* @return
*/
private static DefaultPutRet qiNiuUpload(InputStream is) throws Exception {
    Configuration cfg = new Configuration(Zone.zone0());
    UploadManager uploadManager = new UploadManager(cfg);
    Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
    String upToken = auth.uploadToken(BUCKET);
    com.qiniu.http.Response response = uploadManager.put(is, null, upToken, null, null);
    //解析上傳成功的結果
    DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
    logger.info(putRet.toString());
    logger.info(putRet.key);
    logger.info(putRet.hash);
     return putRet;
    }
}


 

 
  三、入參的實體Dto
 
 
  
public class CrowdDto implements Serializable{
    private static final long serialVersionUID = 1L; //序列化生成uid,在後面生成一個uid
    private String crowdId; //編號
    private String userId; //使用者Id
    private String crowdName;//名稱
    private String crowdLogo;//群頭像
    private MultipartFile multipartFile; //檔案物件屬性


    public MultipartFile getMultipartFile() {
         return multipartFile;
     }
     public void setMultipartFile(MultipartFile multipartFile) {
          this.multipartFile = multipartFile;
     }
     public String getCrowdName() {
      return crowdName;
     }
     public void setCrowdName(String crowdName) {
      this.crowdName = crowdName;
     }
     public String getCrowdLogo() {
      return crowdLogo;
     }
     public void setCrowdLogo(String crowdLogo) {
      this.crowdLogo = crowdLogo;
     }
     public String getUserId() {
          return userId;
     }
     public void setUserId(String userId) {
      this.userId = userId;
     }
     public String getCrowdId() {
      return crowdId;
     }
     public void setCrowdId(String crowdId) {
      this.crowdId = crowdId;
     }
    
    //生成Json字串(類似重寫ToString)
    @Override     public String toString() {
      String js = JSONObject.toJSONString(this);
      return js;
     }


    //靜態生成uid
     public static long getSerialVersionUID() {
      return serialVersionUID;
     }
}
四、API層
public interface IWASCrowdInfoApi {
    /**
    * 上傳檔案(圖片)
    * @param request* @return
    */
    public String uploadFile(@RequestBody CrowdDto requestDto);

}
五、Provide層(實現API)
/**
*
* @className: BackendCrowdInfoProvide
* @describe:
* @author: LeoD
* @createTime
*/
@Service("backendCrowdInfoProvide")
public class BackendCrowdInfoProvide implements IWASCrowdInfoApi {
    @Override
    public String uploadFile(CrowdDto requestDto) {
        return UploadUtil.upload(requestDto.getMultipartFile());
    }
}
、Controller層(通過Swagger來進行測試的,詳情配置見回覆的連結)
  
 
 
  




@CrossOrigin(origins = "*", maxAge = 3600)
@[email protected](tags="資訊管理")
@RequestMapping("/crowdInfo")
public class CrowdInfoController {
private static final Logger logger = LoggerFactory.getLogger(CrowdInfoController.class);
@Autowired
private IWASCrowdInfoApi iWASCrowdInfoApi;
/*上傳檔案(圖片)*/
@ApiOperation(value = "上傳圖片", notes = "上傳圖片", httpMethod = "POST") @RequestMapping(value="uploadFile", method=RequestMethod.POST, produces="text/plain;charset=UTF-8;", consumes="application/json") @ResponseBody
public Response<String> uploadFile(@RequestBody CrowdDto requestDto){
String url = iWASCrowdInfoApi.uploadFile(requestDto);
Response<String> response = Response.create();
response.setData(url);return response;
}
}