Vorwort Bei der Entwicklung eines Miniprogramms besteht die Notwendigkeit, eine Aufnahmefunktion zu implementieren, die Aufnahme abzuspielen und die Aufnahme auf einen Server hochzuladen. Während des Entwicklungsprozesses wurde das Taro-Framework verwendet. Die Aufnahmefunktion wird über die Schnittstelle Taro.getRecorderManager() implementiert, das Hochladen der Aufnahme auf den Server wird über die Schnittstelle Taro.uploadFile implementiert und die Wiedergabe der Aufnahme wird über die Schnittstelle Taro.createInnerAudioContext() implementiert. Nachfolgend finden Sie eine detaillierte Einführung in die Implementierung des gesamten Prozesses. Mini-Programmaufzeichnung Holen Sie sich zuerst das Aufnahmemanagermodul: const recorderManager = Taro.getRecorderManager(); Registrieren Sie das Aufzeichnungsüberwachungsereignis, wenn die Komponente bereitgestellt wird: useEffect(() => { // Auf Aufnahmestart warten recorderManager.onStart(() => { console.log('Aufzeichnung starten'); }); // Monitor-Aufnahmepause recorderManager.onPause(() => { console.log('Aufzeichnung pausieren'); }); // Warten Sie auf die Aufnahme, um fortzufahren recorderManager.onResume(() => { console.log('Aufzeichnung fortsetzen'); }); // Monitoraufzeichnung stoppen recorderManager.onStop((res) => { wenn (Res.Dauer < 1000) { Taro.showToast({ Titel: 'Aufnahmezeit ist zu kurz', Dauer: 1000, Symbol: „keine“, }); } anders { console.log('Aufzeichnung beenden'); DateiUpload(res.tempFilePath); } }); recorderManager.onError(() => { Taro.showToast({ Titel: ,,Aufnahme fehlgeschlagen! ', Dauer: 1000, Symbol: „keine“, }); }); }, []); In der Rückruffunktion der Aufzeichnung onStop können wir die temporäre Adresse der Aufzeichnung res.tempFilePath abrufen, aber diese Adresse hat ein Ablaufdatum, sodass wir die Aufzeichnung auf das Server-Backend hochladen und speichern müssen, bevor sie später normal verwendet werden kann. In der onStop-Callback-Funktion rufen wir die fileUpload-Funktion auf, um die Datei hochzuladen. Die Implementierung der fileUpload-Funktion ist wie folgt: const fileUpload = (tempFilePath) => { Taro.uploadDatei({ url: 'http://127.0.0.1:7001/record', // Serveradresse Dateipfad: tempFilePath, Name: 'Datei', // Dies kann nach Belieben ausgefüllt werden Header: { 'content-type': 'multipart/form-data', // Das Format muss dieses sein Autorisierung: Taro.getStorageSync('token'), }, // formData wird verwendet, um andere Informationen als Dateien zu übertragen formData: { record_name: 'Rezitation Werke', Gedicht-ID: GedichtInfo.id, Kategorie: GedichtInfo.Kategorie, }, Erfolg: (res) => { konsole.log(res); const url = res.data; playAudio(url); // Aufnahme abspielen}, fehlgeschlagen: (Fehler) => { console.log('fehlgeschlagen!'); konsole.fehler(fehler); }, }); }; Zu beachten sind folgende Punkte: Der Inhaltstyp im Header muss „multipart/form-data“ sein. Aufzeichnung der Ereignisverarbeitung Der erste Klick auf handleClick löst den Beginn der Aufnahme aus, und dann wird der aktuelle Status verwendet, um zu bestimmen, ob die Aufnahme angehalten oder fortgesetzt werden soll. handleComplete wird verwendet, um die Aufzeichnung zu stoppen. const handleClick = () => { const curPause = pause; setPause(!aktuellePause); if (ersterDatensatz) { setzeErstenDatensatz(false); recorderManager.start({ Dauer: 60000, Beispielrate: 44100, Anzahl der Kanäle: 1, encodeBitRate: 192000, Format: 'mp3', Rahmengröße: 50, }); Taro.showToast({ Titel: 'Aufnahme starten', Dauer: 1000, Symbol: „keine“, }); } anders { if (aktuellePause) { recorderManager.pause(); // Aufnahme pausieren } else { recorderManager.resume(); //Aufnahme fortsetzen} } }; const handleComplete = () => { recorderManager.stop(); // Aufnahme stoppen}; Der Hintergrund realisiert die Aufzeichnungsspeicherung und gibt die Aufzeichnungsadresse zurück Die meisten Blogs im Internet behandeln diesen Inhalt nicht. Hier werde ich vorstellen, wie man ihn implementiert. Das von mir verwendete Hintergrundframework ist Alibabas egg.js. Informationen zur für den Dateiupload erforderlichen Konfiguration finden Sie im offiziellen Dokument: egg.js-Dateiupload. Hier verwenden wir zur Implementierung den ersten Dateimodus. Da das egg.js-Framework über ein integriertes Multipart-Plugin verfügt, kann es hochgeladene Daten vom Typ „Multipart/Formulardaten“ analysieren. Schreiben Sie zunächst die mehrteilige Konfiguration in die Konfigurationsdatei config.default.js: module.exports = (app) => { Konstantenkonfiguration = (Export = {}); ... config.multipart = { Modus: "Datei", Dateigröße: „50 MB“, } ... zurückkehren { ...Konfiguration, ...Benutzerkonfiguration, }; }; Definieren Sie dann die Routen in router.js: // Aufnahme senden router.post('/record', auth, controller.record.postRecord); Definieren Sie die Datei record.js im Controller-Verzeichnis und schreiben Sie den folgenden Inhalt: const Controller = require('egg').Controller; Klasse RecordController erweitert Controller { asynchroner PostRecord() { const { ctx } = dies; const Datei = ctx.request.files[0]; const { Datensatzname, Gedicht-ID, Kategorie } = ctx.request.body; const res = warte auf ctx.service.record.postRecord(Datei, Datensatzname, Gedicht-ID, Kategorie); ctx.body = res; } } module.exports = DatensatzController; Definieren Sie record.js im Serviceverzeichnis und schreiben Sie die spezifische Implementierung: const Service = erfordern('egg').Service; Lassen Sie OSS = erfordern ('ali-oss'); lass aliInfo = { // https://help.aliyun.com/document_detail/31837.html Region: 'oss-cn-guangzhou', Eimer: 'Gedicht-Mini-Programm', accessKeyId: 'xxx', // Füllen Sie die accessKeyId von Alibaba Cloud aus accessKeySecret: 'xxx', // Füllen Sie Alibaba Clouds accessKeySecret aus }; let client = neues OSS(aliInfo); Klasse RecordService erweitert Service { async postRecord(Datei, Datensatzname, Gedicht-ID, Kategorie) { const url = warte auf dies.uploadOSS(Datei); warte auf Folgendes.updateRecord(URL, Datensatzname, Gedicht-ID, Kategorie); URL zurückgeben; } asynchroner UploadOSS(Datei) { const { ctx } = dies; lass resultieren; versuchen { // Dateien verarbeiten, beispielsweise in die Cloud hochladen result = await client.put(file.filename, file.filepath); Endlich // Temporäre Dateien müssen gelöscht werden. Warten Sie auf ctx.cleanupRequestFiles(); } gib result.url zurück; } async updateRecord(url, Datensatzname, Gedicht-ID, Kategorie) { const { ctx } = dies; console.log('OpenID von ctx.locals abrufen'); Konsole.log(ctx.locals.openid); const openid = ctx.locals.openid; // Benutzerinformationen in der Datenbank aufzeichnen const res = await ctx.model.Record.create({ Datensatzname: Datensatzname, record_url: URL, Gedicht-ID: Gedicht-ID, Kategorie: Kategorie, OpenID: OpenID, }); } } module.exports = Datensatzdienst; Bitte beachten Sie:
Aufnahme abspielen Aufmerksame Freunde bemerken möglicherweise, dass nach dem Hochladen der Aufnahme mithilfe der Taro.uploadFile-Schnittstelle die Funktion playAudio im Erfolgsrückruf aufgerufen wird, um das Audio abzuspielen. Lassen Sie uns als Nächstes darüber sprechen, wie das Audio abgespielt wird. Verwenden Sie zunächst Taro.createInnerAudioContext, um das Audiokontextobjekt abzurufen: const innerAudioText = Taro.createInnerAudioContext(); Registrieren Sie genau wie bei der Aufzeichnung ein Listener-Ereignis, wenn die Komponente bereitgestellt wird: useEffect(() => { innerAudioText.onPlay(() => { console.log('Mit der Wiedergabe beginnen'); }); innerAudioText.onError((e) => { console.log('Wiedergabestörung'); konsole.log(e); }); }, []); Nachdem die Aufnahmedatei erfolgreich hochgeladen wurde, rufen Sie die Methode playAudio auf, um die Aufnahme abzuspielen: const playAudio = (URL) => { innerAudioText.autoplay = true; innerAudioText.src = URL; }; Wenn src ein Wert zugewiesen wird, wird die Aufnahme abgespielt. ZusammenfassenDies ist das Ende dieses Artikels über die Implementierung der Miniprogramm-Aufzeichnungsfunktion. Weitere relevante Inhalte zur Miniprogramm-Aufzeichnung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Führen Sie die Schritte zum Erstellen des NFS-Dateifreigabespeicherdienstes in CentOS 7 aus
>>: So erlauben Sie allen Hosts den Zugriff auf MySQL
1. Überprüfen Sie den Linux-Festplattenstatus df ...
Laden eines oder mehrerer Features <Vorlage>...
Inhaltsverzeichnis 1. Objekte durch Literalwert e...
1. Benutzerdefinierte Textauswahl ::Auswahl { Hin...
<br />Der Autor war früher ein Anfänger im W...
In diesem Artikel wird der spezifische Code des j...
In diesem Artikelbeispiel wird der spezifische Co...
1. Docker mountet das lokale Verzeichnis Docker k...
1. Verständnis der Übergangsattribute 1. Das Über...
Installieren Sie Grafana. Die offizielle Website ...
Inhaltsverzeichnis Vorwort Einzelne Dateikomponen...
Inhaltsverzeichnis Webkomponenten benutzerdefinie...
<br />Vorheriger Artikel: Webdesign-Tutorial...
Inhaltsverzeichnis Schleife - für Grundlegende Ve...
Die Implementierungsmethode gliedert sich in drei...