import { fromByteArray as base64Encode } from 'base64-js' import Token from './token' import config from '../config' import { request_post } from '../request' const { ali1688_api_key, ali1688_host, ali1688_jsv, ali1688_upload_api, ali1688_upload_app_key, ali1688_upload_app_name, ali1688_v, } = config class Ali1688Uploader extends Token { constructor(options?) { super(options) } binaryio_to_base64(binaryData) { return base64Encode(new Uint8Array(binaryData)) } get upload_url() { return `https://${ali1688_host}/h5/${ali1688_upload_api.toLowerCase()}/${ali1688_v}` } get upload_headers() { return { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', referer: 'https://www.1688.com/', 'Content-Type': 'application/x-www-form-urlencoded' } } get_data(fileBuffer) { const b64_str = this.binaryio_to_base64(fileBuffer) return JSON.stringify({ imageBase64: b64_str, appName: ali1688_upload_app_name, appKey: ali1688_upload_app_key, }) } async upload(fileBuffer) { await this.token_request() const data = this.get_data(fileBuffer) const params = this.get_params(data, this.t) const headers = this.upload_headers try { const response = await request_post({ url: this.upload_url, params, headers, data, }) return response.data } catch (error) { console.error('Upload failed:', error) return null } } get_params(data, t, jsv = ali1688_jsv) { const sign_str = this.get_sign(data, t, this.token) return { jsv, appKey: ali1688_api_key, t, api: ali1688_upload_api, ecode: '0', v: ali1688_v, type: 'originaljson', dataType: 'jsonp', sign: sign_str, "_bx-v": "1.1.20" } } } export default Ali1688Uploader;