В интернете искал некоторое время, в целом, cropper лучше. Этот проект основан на cropper и некоторых интернет-ресурсах. Стоит ли вам использовать этот проект? Если вам нужно напрямую загрузить аватар в сервис OSS от Alibaba Cloud, вы можете напрямую использовать этот проект. Если вы загружаете на свой собственный сервер приложений, вы также можете использовать этот проект, но функция загрузки требует вашей собственной реализации с учётом бэкенда.
Здесь представлена версия на Java, для других языков обратитесь к официальной документации Alibaba Cloud.
Обратите внимание: для OSS от Alibaba Cloud необходимо включить поддержку POST для междоменных запросов.
public JSONObject getOSSToken() {
String endpoint = "oss-cn-shanghai.aliyuncs.com";
String accessId = "accessId ";
String accessKey = "accessKey ";
String bucket = "bucket ";
String dir = "picture/";
String host = "http://" + bucket + "." + endpoint;
OSSClient client = new OSSClient(endpoint, accessId, accessKey);
try {
long expireTime = 30;
long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
Date expiration = new Date(expireEndTime);
PolicyConditions policyConds = new PolicyConditions();
policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
String postPolicy = client.generatePostPolicy(expiration, policyConds);
byte[] binaryData = postPolicy.getBytes("utf-8");
String encodedPolicy = BinaryUtil.toBase64String(binaryData);
String postSignature = client.calculatePostSignature(postPolicy);
Map<String, String> respMap = new LinkedHashMap<String, String>();
respMap.put("accessid", accessId);
respMap.put("policy", encodedPolicy);
respMap.put("signature", postSignature);
//respMap.put("expire", formatISO8601Date(expiration));
respMap.put("dir", dir);
respMap.put("host", host);
respMap.put("expire", String.valueOf(expireEndTime / 1000));
JSONObject ja1 = JSONObject.fromObject(respMap);
return ja1;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Импортирование файлов
//CSS
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="cropper/cropper.min.css" rel="stylesheet">
<link href="headpicker/headpicker.css" rel="stylesheet">
//Js
<script src="cropper/cropper.min.js"></script>
<script src="headpicker/headpicker.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
Код JavaScript
var picker = $('#avatar-modal');//头像弹出层
//弹出层
$('#head').click(function (e) {
picker.modal('show');
});
var headpicker = new HeadPicker();
var options = {
aspectRatio:1,//图片比例
circular:true,//是否开启原型遮罩
guides:false,//是否显示虚线
accessApi:"http://192.168.1.102:8080/oss/access",//授权接口
host:"http://data.yueare.com/",//OSS访问地址,这里我绑定了自己的域名,可以直接使用阿里云提供的
maxFileSize:1024*1024*2,//设置文件的最大值
imageQuality:0.9,//设置图像的质量
fileChooseInput:$('#avatarInput'),//设置图片选择input
orignImgContainer:$('#orignImg'),//设置原始图像的img容器
previewImgContainers:$('.avatar-preview'),//设置预览图片的容器,支持多个容器
rotateBtns:$('.avatar-btns'),//设置图片旋转按钮
completeBtn:$('.avatar-save'),//设置保存按钮
clipboardListenerContainerID:"cp",//对一个容器设置剪贴板粘贴监听事件(可选)
//文件选择消息回调
picChooseCallBack:function (msg) {
alert(msg);
},
//授权消息回调
accessCallBack:function (msg) {
alert(msg);
},
//上传回调
uploadCallBack:function (msg,backImgurl) {
$('#head').attr('src',backImgurl);
picker.modal('hide');
}
};
headpicker.initHeadPicker(options);
После инициализации с помощью headpicker.initHeadPicker(options);
вызовите headpicker.getImgDataUrl();
var dataurl = headpicker.getImgDataUrl();
console.log(dataurl);
После инициализации с помощью headpicker.initHeadPicker(options);
вызовите headpicker.getImgBlob();
headpicker.getImgBlob(function(blob) {
console.log(blob);
});
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )