You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JavaScript获取Action方法返回的待下载文件并转为Blob

可以通过JavaScript实现将转换后的文件作为Blob处理

当然可以,你需要调整请求方式,避免直接触发浏览器下载,而是通过AJAX获取Blob格式的响应,以下是具体实现方案:

问题分析

你当前的表单提交会直接触发浏览器下载,而现有JS代码存在核心问题:

  • 用JSON.stringify()处理multipart/form-data格式的数据是错误的,这类数据需要用FormData对象构建
  • jQuery AJAX默认会自动处理数据,需禁用该行为并正确设置响应类型

修正后的jQuery实现代码

function convert(inputFile) {
    // 构建FormData对象,模拟表单提交的数据结构
    const formData = new FormData();
    formData.append('File', inputFile);
    formData.append('FileName', 'Test');

    $.ajax({
        url: 'https://v2.convertapi.com/convert/xls/to/xlsx?Secret=...',
        method: 'POST',
        data: formData,
        // *关键设置*:禁止jQuery自动处理数据和设置Content-Type
        processData: false,
        contentType: false,
        // *关键设置*:指定响应类型为blob,返回结果直接是Blob对象
        xhrFields: {
            responseType: 'blob'
        },
        success: function(blob) {
            // 此处拿到的blob就是转换后的XLSX文件,可按需进一步处理
            console.log('获取到Blob:', blob);

            // 示例:生成临时下载链接(用于验证转换结果,可选)
            const downloadUrl = URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.href = downloadUrl;
            a.download = 'converted.xlsx';
            a.click();
            URL.revokeObjectURL(downloadUrl); // *释放临时URL资源,避免内存泄漏*

            // 你可以在这里将Blob用于其他操作:比如上传到其他服务器、用第三方库解析内容等
        },
        error: function(err) {
            console.error('转换失败:', err.responseText);
        }
    });
}

原生JavaScript实现(无需jQuery)

如果不想依赖jQuery,也可以用原生Fetch API实现:

async function convert(inputFile) {
    const formData = new FormData();
    formData.append('File', inputFile);
    formData.append('FileName', 'Test');

    try {
        const response = await fetch('https://v2.convertapi.com/convert/xls/to/xlsx?Secret=...', {
            method: 'POST',
            body: formData
        });

        if (!response.ok) {
            throw new Error(`请求失败:${response.statusText}`);
        }

        const blob = await response.blob();
        console.log('获取到Blob:', blob);
        // 后续Blob处理逻辑可参考上方示例
    } catch (err) {
        console.error('转换失败:', err);
    }
}

关键注意事项

  • 移除URL中的download=attachment参数,该参数会强制服务器返回下载响应头,导致浏览器自动触发下载
  • 确保请求URL中的Secret参数正确,这是ConvertAPI的验证密钥
  • 使用临时URL后必须调用URL.revokeObjectURL()释放资源,避免内存占用过高

内容的提问来源于stack exchange,提问作者Umair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:16:02