1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/pumelotea-WebHeadPicker

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.MD

WebHeadPicker

Web头像拾取器插件

В интернете искал некоторое время, в целом, cropper лучше. Этот проект основан на cropper и некоторых интернет-ресурсах. Стоит ли вам использовать этот проект? Если вам нужно напрямую загрузить аватар в сервис OSS от Alibaba Cloud, вы можете напрямую использовать этот проект. Если вы загружаете на свой собственный сервер приложений, вы также можете использовать этот проект, но функция загрузки требует вашей собственной реализации с учётом бэкенда.

Поддерживаемые функции

  • Поддержка прямой загрузки аватара в OSS от Alibaba Cloud через фронтенд.
  • Поддержка функции предварительного просмотра обрезки.
  • Поддержка получения данных обрезки аватара: DataUrl (base64), Blob (двоичный).
  • Поддержка разделения пользовательского интерфейса и логики, возможность настройки пользовательского интерфейса.
  • Поддержка настройки соотношения сторон изображения в формате x/y.
  • Поддержка круглой рамки обрезки изображения.
  • Поддержка установки качества изображения после обрезки.
  • Поддержка ограничения максимального размера изображения.
  • Поддержка обратного вызова при выборе изображения.
  • Поддержка обратного вызова для запроса авторизации.
  • Поддержка обратного вызова загрузки изображения.
  • Поддержка вставки изображения из буфера обмена непосредственно в режим обрезки аватара.

Реализация бэкенд-интерфейса авторизации OSS

Здесь представлена версия на 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);

Получение DataURL

После инициализации с помощью headpicker.initHeadPicker(options); вызовите headpicker.getImgDataUrl();

var dataurl = headpicker.getImgDataUrl();
console.log(dataurl);

Получение Blob

После инициализации с помощью headpicker.initHeadPicker(options); вызовите headpicker.getImgBlob();

headpicker.getImgBlob(function(blob) {
   console.log(blob);
});

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Извлечение и обрезка веб-аватара с последующей загрузкой в OSS облачного сервиса Alibaba. Развернуть Свернуть
MIT
Отмена

Обновления (4)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/pumelotea-WebHeadPicker.git
git@api.gitlife.ru:oschina-mirror/pumelotea-WebHeadPicker.git
oschina-mirror
pumelotea-WebHeadPicker
pumelotea-WebHeadPicker
master