如何通过JSON响应保存文件?能否用给定JSON数据下载文件?
如何通过JSON响应保存文件?
当然可以将文件保存到本地,你收到的JSON里的file字段是Base64编码的文件二进制内容,只需要解码后写入本地文件即可。下面分不同场景给出具体实现:
关键字段说明
data.contentType:文件的MIME类型(这里是Excel格式)data.file:Base64编码的文件原始二进制数据data.name:建议保存的文件名
Python 实现
import json import base64 # 替换为你实际获取到的JSON响应字符串 json_response = ''' { "additionalErrors": null, "data": { "contentType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "file": "UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAATAAAAeGwvdGhlbWUvdGhlbWUxLnhtbOyZz2/bNhT...", "name": "export-data.xlsx" }, "error": false, "errorText": "" } ''' # 解析JSON并提取关键数据 response_obj = json.loads(json_response) base64_content = response_obj['data']['file'] save_name = response_obj['data']['name'] # 解码Base64并写入文件 decoded_content = base64.b64decode(base64_content) with open(save_name, 'wb') as f: f.write(decoded_content)
浏览器端 JavaScript 实现
// 替换为你实际获取到的JSON响应对象 const jsonResponse = { "additionalErrors": null, "data": { "contentType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "file": "UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAATAAAAeGwvdGhlbWUvdGhlbWUxLnhtbOyZz2/bNhT...", "name": "export-data.xlsx" }, "error": false, "errorText": "" }; const base64Content = jsonResponse.data.file; const saveName = jsonResponse.data.name; const contentType = jsonResponse.data.contentType; // 解码Base64为Blob对象 const byteStr = atob(base64Content); const byteArr = new Uint8Array(byteStr.length); for (let i = 0; i < byteStr.length; i++) { byteArr[i] = byteStr.charCodeAt(i); } const blob = new Blob([byteArr], { type: contentType }); // 生成下载链接并触发下载 const downloadUrl = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = downloadUrl; link.download = saveName; document.body.appendChild(link); link.click(); // 清理资源 document.body.removeChild(link); URL.revokeObjectURL(downloadUrl);
Node.js 实现
const fs = require('fs'); const { fromByteArray } = require('base64-js'); // 替换为你实际获取到的JSON响应字符串 const jsonResponse = ` { "additionalErrors": null, "data": { "contentType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "file": "UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAATAAAAeGwvdGhlbWUvdGhlbWUxLnhtbOyZz2/bNhT...", "name": "export-data.xlsx" }, "error": false, "errorText": "" } `; const responseObj = JSON.parse(jsonResponse); const base64Content = responseObj.data.file; const saveName = responseObj.data.name; // 解码Base64并写入文件 const decodedBytes = fromByteArray(base64Content); fs.writeFileSync(saveName, decodedBytes);
内容的提问来源于stack exchange,提问作者po100lit
相关产品推荐
相关产品推荐

