ncm_api_rs/api/
cloud_upload_token.rs1use super::Query;
2use crate::error::Result;
3use crate::request::{ApiClient, ApiResponse, CryptoType};
6use serde_json::json;
7
8impl ApiClient {
9 pub async fn cloud_upload_token_check(&self, query: &Query) -> Result<ApiResponse> {
15 let bitrate = query.get_or("bitrate", "999000");
16 let data = json!({
17 "bitrate": &bitrate,
18 "ext": "",
19 "length": query.get_or("fileSize", "0").parse::<i64>().unwrap_or(0),
20 "md5": query.get_or("md5", ""),
21 "songId": "0",
22 "version": 1
23 });
24 self.request(
25 "/api/cloud/upload/check",
26 data,
27 query.to_option(CryptoType::default()),
28 )
29 .await
30 }
31
32 pub async fn cloud_upload_token_alloc(&self, query: &Query) -> Result<ApiResponse> {
35 let filename = query.get_or("filename", "");
36 let ext = if filename.contains('.') {
37 filename.rsplit('.').next().unwrap_or("mp3").to_string()
38 } else {
39 "mp3".to_string()
40 };
41 let clean_name = filename
42 .rsplit_once('.')
43 .map(|(name, _)| name)
44 .unwrap_or(&filename)
45 .replace(' ', "")
46 .replace('.', "_");
47 let data = json!({
48 "bucket": "jd-musicrep-privatecloud-audio-public",
49 "ext": ext,
50 "filename": clean_name,
51 "local": false,
52 "nos_product": 3,
53 "type": "audio",
54 "md5": query.get_or("md5", "")
55 });
56 self.request(
57 "/api/nos/token/alloc",
58 data,
59 query.to_option(CryptoType::Weapi),
60 )
61 .await
62 }
63}