不行不行!此路暫時不通!
簡單來說,AI提供的CloudConvertAPI的使用方式是過時的!
這裡還有一個新版,但結果一樣不可行!
import 'dart:convert';
import 'dart:typed_data';
import 'package:http/http.dart' as http;
class WaveConvert {
String apiKey = 'your_cloudconvert_api_key';
Future<void> convertAudioToWave(Uint8List inputData) async {
// Step 1: Create an upload task
final createTaskResponse = await http.post(
Uri.parse('https://api.cloudconvert.com/v2/import/upload'),
headers: {
'Authorization': 'Bearer $apiKey',
'Content-Type': 'application/json',
},
body: jsonEncode({
'operation': 'import/upload',
}),
);
if (createTaskResponse.statusCode != 200) {
throw Exception('Failed to create upload task: ${createTaskResponse.body}');
}
final createTaskResponseBody = jsonDecode(createTaskResponse.body);
final uploadUrl = createTaskResponseBody['result']['url'];
final taskId = createTaskResponseBody['id'];
// Step 2: Upload your file to CloudConvert
final uploadResponse = await http.put(
Uri.parse(uploadUrl),
headers: {
'Content-Type': 'application/octet-stream',
},
body: inputData,
);
if (uploadResponse.statusCode != 200) {
throw Exception('Failed to upload file: ${uploadResponse.body}');
}
// Step 3: Create a convert task and reference your uploaded file
final convertResponse = await http.post(
Uri.parse('https://api.cloudconvert.com/v2/convert'),
headers: {
'Authorization': 'Bearer $apiKey',
'Content-Type': 'application/json',
},
body: jsonEncode({
'input': taskId,
'output_format': 'wav',
'engine': 'ffmpeg',
}),
);
if (convertResponse.statusCode != 200) {
throw Exception('Failed to convert audio file: ${convertResponse.body}');
}
}
}
簡單來說,它的服務不是一次到位,而是要多次使用多種服務,最後才能順利取到轉檔。
1.取得一組「任務」編號碼。
2.用「任務」編號碼上傳檔案。
3.用「任務」編號碼取回檔案處理結果。
這部分...(我偷跑了,跑去用人力肉眼看官方的API說明,)似乎概念上是正確的,但API的使用方式卻不對!
新產生Key時,忘了開啟task.read和task.write的權限,(回去重新生產一組有全線的Key。)
「uploadResponse.statusCode」不只能接受200,同時也要能接受201。(這地方有點頭疼啊!試了半天,都抓不到讓AI按照我的期望去修改程式的辦法。)
但即使這樣,依然不能順利獲得回傳。
一天又這樣過去了!
(習慣就好,寫程式就是這樣。)
(所以這年頭很多公司討厭「研發」,都會希望工程師能夠帶來現成、保證百分之百立刻成功的各種知識經驗,然後投入專案中。)