uniapp подключается к ОСС, загрузка видео + сжатие
uniapp подключается к ОСС, загрузка видео + сжатие

Во-первых, это код для загрузки файла:

Язык кода:javascript
копировать
module.exports = {
	getUUID() { //Сгенерируем UUID
		return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
			return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16)
		})
	},
	beforeUpload({
		file,
		module
	}) {
		let _self = this;
		return new Promise((resolve, reject) => {
			this.policy(module)
				.then(response => {
					resolve({
						policy: response.data.policy,
						signature: response.data.signature,
						ossaccessKeyId: response.data.accessid,
						key: response.data.dir + this.getUUID() + "${filename}",
						dir: response.data.dir,
						host: response.data.host
					});
				})
				.catch(err => {
					reject(err);
				});
		});
	},
	policy(module) {
		return new Promise((resolve, reject) => {
			uni.request({
                // Изменить интерфейс получения визы oss здесь
				url: 'http://Интерфейс для получения визы/' + 'oss',
				data: {
					module
				},
				success: (res) => {
					if (res.data.success) {
						resolve(res.data)
					} else {
						reject(res)
					}
				},
				fail: (err) => {
					reject(err)
				}
			});
		})
	},
	uploadFile({
		file,
		module,
		response,
		limit = 5242880
	}) {
		console.log("uploadFile: ", {
			file,
			module,
			response
		})
		// Лимит 5М, блок Б
		if (!file) {
			uni.showToast({
				title: «Не удалось прочитать файл»,
				icon: 'none'
			});
			return false;
		}
		if (file.size > limit) {
			uni.showToast({
				title: «Превышен лимит размера»,
				icon: 'none'
			});
			return false;
		}
		let filename = file.path.substr(file.path.lastIndexOf("/") + 1)
		this.beforeUpload({
			file,
			module
		}).then(res => {
			let options = {
				url: res.host,
				name: 'file',
				filePath: file.path,
				formData: res,
				success: ossCallBack => {
					console.log({
						ossCallBack,
						filename
					})
					response(res.host + "/" + res.key.replace("${filename}", filename))
				},
				fail: console.error
			}
			console.log(options)
			uni.uploadFile(options)
		}).catch(console.error)
	}
}

Затем загрузка видео + сжатие

Язык кода:javascript
копировать
<script>
const oss = require('@/utils/oss.js');
export default {
    methods: {
		upload(file, { contentType }) {
			console.log({ file });
			console.log({ contentType });
			let messageType = '';
			let content = file.path;
			let limit;
			switch (contentType) {
				case 1:
					messageType = 'IMAGE';
					limit = 2097152;
					break;
				case 4:
					messageType = 'VIDEO';
					limit = 10485760;
					break;
			}
			oss.uploadFile({
				file,
				module: 'chat',
				limit,
				response: filePath => {
					console.log('File upload success!');
					console.log({ filePath });
                    // Загрузить полный обратный вызов
				}
			});
		},

		onImage() {
			uni.chooseImage({
				sourceType: ['album'],
				success: res => {
					res.tempFiles.forEach(file => {
						this.upload(file, {
							contentType: 1
						});
					});
				}
			});
		},

		onVideo() {
			uni.chooseVideo({
				count: 1,
				compressed: true,
				sourceType: ['album', 'camera'],
				success: res => {
					console.log({ res });
                    // Этот фрагмент настраивается, и для отключения сжатия по умолчанию при загрузке необходимо установить значение false.
					// console.log('сжатие прежнего размера:: ', res.size / (1024 * 1024) + 'KB');
					// uni.getVideoInfo({
					// 	src: res.tempFilePath,
					// 	success: ({ fps, bitrate }) => {
					// 		console.log({ fps, bitrate });
					// 		uni.compressVideo({
					// 			src: res.tempFilePath,
					// 			quality: 'high',
					// 			bitrate,
					// 			fps,
					// 			resolution: 1,
					// 			success: res => {
					// 				console.log({ res });
					// 				console.log('сжатиеPost size:: ', res.size / (1024 * 1024) + 'KB');
					// 				this.upload({ path: res.tempFilePath, size: res.size },{ contentType: 4 });
					// 			}
					// 		});
					// 	}
					// });
					console.log('видеоразмер:: ', res.size / (1024 * 1024) + 'KB');
					this.upload({ path: res.tempFilePath, size: res.size }, { contentType: 4 });
				}
			});
		},

		onShoot() {
			uni.chooseImage({
				sourceType: ['camera'],
				success: res => {
					this.upload(res.tempFiles[0], {
						contentType: 1
					});
				}
			});
		}
	}
};
</script>
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose