Java七牛云报400错误
报错:{ResponseInfo:com.qiniu.http.Response@29a28d60,status:400, reqId:HioAAG-QCb69S40V, xlog:body;UP/400, xvia:, adress:up.qiniu.com/115.231.97.46:80, duration:0.000000 s, error:incorrect region, please use up-z2.qiniup.com}
1.添加maven依赖
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.10</version>
</dependency>
2.ImgUploadResult对象
import java.math.BigDecimal;
public class ImgUploadResult {
/**
* 是否上传成功
*/
private boolean success;
/**
* 图片地址
*/
private String url;
/**
* 图片尺寸,单位byte
*/
private BigDecimal size;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public BigDecimal getSize() {
return size;
}
public void setSize(BigDecimal size) {
this.size = size;
}
}
3.QiNiuApi对象
import java.math.BigDecimal;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.hwx.framework.util.DateUtil;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
public class QiNiuApi {
private static Logger logger = LoggerFactory.getLogger(QiNiuApi.class);
private String accessKey;
private String secretKey;
private String token;
private UploadManager uploadManager;
// 要上传的空间
private String bucketname;
/**
* token过期时间
*/
private Date expiredTime;
// 上传之后保存文件url的前缀,前缀+upload方法的fileName参数可以构成一个可访问的文件url
private String urlPrefix;
public QiNiuApi(String accessKey, String secretKey, String bucketName, String urlPrefix) {
this.accessKey = accessKey;
this.secretKey = secretKey;
this.bucketname = bucketName;
this.urlPrefix = urlPrefix;
Auth auth = Auth.create(this.accessKey, this.secretKey);
this.token = auth.uploadToken(this.bucketname);
this.expiredTime = DateUtil.addMinutes(new Date(), 40);
Zone z = Zone.autoZone();
Configuration c = new Configuration(z);
this.uploadManager = new UploadManager(c);
}
public ImgUploadResult upload(byte[] data, String fileName) {
ImgUploadResult result = new ImgUploadResult();
result.setSuccess(true);
if (null == data) {
result.setSize(BigDecimal.ZERO);
logger.error("上传到七牛的文件内容为Null,fileName{}.", fileName);
return result;
}
try {
// 调用put方法上传
Response res = uploadManager.put(data, fileName, token);
// 打印返回的信息
if (null != res && res.isOK()) {
result.setUrl(urlPrefix + fileName);
result.setSize(new BigDecimal(data.length));
} else {
logger.error("上传文件到七牛失败,reponse={},response.error={}.,", null != res ? res : "res为null",
null != res ? res.error : "");
result.setSuccess(false);
result.setSize(BigDecimal.ZERO);
}
} catch (QiniuException e) {
Response r = e.response;
try {
logger.error("上传文件到七牛失败,reponse={}:", r.bodyString(), e);
} catch (QiniuException e1) {
logger.error("上传文件到七牛失败:", e);
}
result.setSuccess(false);
result.setSize(BigDecimal.ZERO);
} catch (Exception e) {
logger.error("上传文件到七牛失败:", e);
result.setSuccess(false);
result.setSize(BigDecimal.ZERO);
}
return result;
}
public Date getExpiredTime() {
return expiredTime;
}
public void setExpiredTime(Date expiredTime) {
this.expiredTime = expiredTime;
}
/**
* token是否已过期
*
* @return
*/
public boolean isExpired() {
return new Date().compareTo(expiredTime) > 0;
}
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public String getBucketname() {
return bucketname;
}
public void setBucketname(String bucketname) {
this.bucketname = bucketname;
}
public String getUrlPrefix() {
return urlPrefix;
}
public void setUrlPrefix(String urlPrefix) {
this.urlPrefix = urlPrefix;
}
}
4.QiNiuFactory类
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.hwx.framework.base.exception.ServiceException;
public class QiNiuFactory {
private static Map<String, QiNiuApi> qiNiuApiContainer = new HashMap<String, QiNiuApi>();
private static final String accessKey_KEY = "accessKey";
private static final String secretKey_KEY = "secretKey";
private static final String bucketName_KEY = "bucketName";
private static final String urlPrefix_KEY = "urlPrefix";
public static QiNiuApi getQiNiuApi(String qiNiuParam) {
if (StringUtils.isBlank(qiNiuParam)) {
throw new ServiceException("", "图片服务器参数无效");
}
JSONObject json = JSONObject.parseObject(qiNiuParam);
String accessKey = json.getString(accessKey_KEY);
String secretKey = json.getString(secretKey_KEY);
String bucketName = json.getString(bucketName_KEY);
String urlPrefix = json.getString(urlPrefix_KEY);
if (StringUtils.isBlank(accessKey) || StringUtils.isBlank(secretKey) || StringUtils.isBlank(bucketName)
|| StringUtils.isBlank(urlPrefix)) {
throw new ServiceException("", "图片服务器参数无效");
}
if (null == qiNiuApiContainer.get(qiNiuParam)) {
QiNiuApi qiNiuApi = new QiNiuApi(accessKey, secretKey, bucketName, urlPrefix);
qiNiuApiContainer.put(qiNiuParam, qiNiuApi);
return qiNiuApi;
} else {
QiNiuApi qiNiuApi = qiNiuApiContainer.get(qiNiuParam);
if (qiNiuApi.isExpired()) {
qiNiuApi = new QiNiuApi(accessKey, secretKey, bucketName, urlPrefix);
qiNiuApiContainer.put(qiNiuParam, qiNiuApi);
}
return qiNiuApi;
}
}
}
5.把这边这个三类复制到自己的本地,引用自己本地包