function uploadExhibitionCover(inputFile, callback) {
    var suffix = inputFile.value.substring(inputFile.value.lastIndexOf("."));
    var filename = "exhibitions/"+Date.now()+suffix;
    OssUpload(inputFile.files[0], filename, function(url) {
        callback(url);
    });
}

function uploadExhibit(inputFile, callback) {
    var suffix = inputFile.value.substring(inputFile.value.lastIndexOf("."));
    var filename = "exhibits/"+Date.now()+suffix;
    OssUpload(inputFile.files[0], filename, function(url) {
        callback(url);
    });
}

function uploadExhibitAudioDetail(inputFile, callback) {
    var suffix = inputFile.value.substring(inputFile.value.lastIndexOf("."));
    var filename = "exhibit_details/audio_details/"+Date.now()+suffix;
    OssUpload(inputFile.files[0], filename, function(url) {
        callback(url);
    });
}

function uploadExhibitDetail(inputFile, callback) {
    var suffix = inputFile.value.substring(inputFile.value.lastIndexOf("."));
    var filename = "exhibit_details/"+Date.now()+suffix;
    OssUpload(inputFile.files[0], filename, function(url) {
        callback(url);
    });
}

const headers = {
    // 指定该Object被下载时网页的缓存行为。
    'Cache-Control': 'no-cache',
    // 指定该Object被下载时的名称。
    // 'Content-Disposition': 'oss_download.txt', 
    // 指定该Object被下载时的内容编码格式。
    // 'Content-Encoding': 'UTF-8', 
    // 指定过期时间。
    // 'Expires': 'Wed, 08 Jul 2022 16:57:01 GMT', 
    // 指定Object的存储类型。
    'x-oss-storage-class': 'Standard',
    // 指定Object的访问权限。
    'x-oss-object-acl': 'public-read',
    // 设置Object的标签，可同时设置多个标签。
    // 'x-oss-tagging': 'Tag1=1&Tag2=2', 
    // 指定CopyObject操作时是否覆盖同名目标Object。此处设置为true，表示禁止覆盖同名Object。
    'x-oss-forbid-overwrite': 'false',
};

async function putObject(client, data, filename, callback) {
    try {
        // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
        // 您可以通过自定义文件名（例如exampleobject.txt）或文件完整路径（例如exampledir/exampleobject.txt）的形式实现将数据上传到当前Bucket或Bucket中的指定目录。
        // data对象可以自定义为file对象、Blob数据或者OSS Buffer。
        const result = await client.put(
            filename,
            data,
            {headers}
        );
        callback(result.url)
    } catch (e) {
        console.log(e);
        alert(e);
    }
}

function OssUpload(data, filename, callback) {
    $.ajax({
        type: "GET",
        url: "/auth/sts",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (token) {
            var client = new OSS({
                // bucket地域
                region: token.region,
                // https请求
                secure: true,
                // 地域节点
                endpoint: token.endpoint,
                // 从STS服务获取的临时访问密钥
                accessKeyId: token.access_key_id,
                accessKeySecret: token.access_key_secret,
                // 从STS服务获取的安全令牌
                stsToken: token.sts_token,
                // bucket名称
                bucket: token.bucket,
                // 超时时间单位ms
                timeout:300000
            })
            putObject(client, data, filename, callback);
        },
        error: function (xhr, textStatus, error) {
            var msg = JSON.parse(xhr.responseText);
            alert(msg.error);
        }
    });
}