|
|
独立的树叶 · 求助:FileReader ...· 2 月前 · |
|
|
很拉风的小狗 · React中如何在FileReader的on ...· 2 月前 · |
|
|
失眠的番茄 · H5计算图片视频资源md5值(使用filea ...· 2 月前 · |
|
|
朝气蓬勃的洋葱 · 人民日报海外版-人民网· 1 年前 · |
|
|
稳重的葫芦 · oracle操作字符串:拼接、截取、查找、替 ...· 1 年前 · |
|
|
气势凌人的跑步鞋 · css实现数字动态切换效果_数字跳转csss ...· 1 年前 · |
|
|
强悍的牛肉面 · 点四下跳过谷歌验证 - 百度· 1 年前 · |
|
|
精明的钥匙扣 · yolov5——detect.py代码【注释 ...· 2 年前 · |
我如何上传一个JSON文件在我的网页上点击一个按钮说“导入”,并使用它存储在一个变量中使用和更新它使用JavaScript。
我已经翻阅了其他帖子,但没有找到任何答案。
我使用以下函数保存JSON变量:
function save(filename, data){
if(!data) {
alert('error : No data')
return;
if(typeof data === "object"){
data = JSON.stringify(data, undefined, 4)
var blob = new Blob([data], {type: 'text/json'}),
e = document.createEvent('MouseEvents'),
a = document.createElement('a')
a.download = filename
a.href = window.URL.createObjectURL(blob)
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':')
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
a.dispatchEvent(e)
}
这是很好的工作,它下载文件点击另一个按钮,如“导出”。如何将此文件上传回并生成该文件数据的JSON变量?
没有服务器端代码,最好的方法可能是为用户提供一个
textarea
元素,以便将JSON复制/粘贴到其中,然后使用
JSON.parse
解析它。
您甚至可以使用像 Ace编辑器 这样的东西为JSON提供语法高亮显示--您可以在 王牌编辑厨房水槽演示 上看到它的作用--从左上角的下拉列表中选择JSON。
编辑:
结果我错了。下面是演示正在使用的FileReader的小提琴,这正是您所需要的:
https://jsfiddle.net/Ln37kqc0/
以下是代码:
Javascript:
document.getElementById('import').onclick = function() {
var files = document.getElementById('selectFiles').files;
console.log(files);
if (files.length <= 0) {
return false;
var fr = new FileReader();
fr.onload = function(e) {
console.log(e);
var result = JSON.parse(e.target.result);
var formatted = JSON.stringify(result, null, 2);
document.getElementById('result').value = formatted;
fr.readAsText(files.item(0));
};
HTML:
<input type="file" id="selectFiles" value="Import" /><br />
<button id="import">Import</button>
<textarea id="result"></textarea>
我有一种方法可以使用上传的json文件,下面是我找到的方法。
$("#inputFile").change(function(e) {
onChange(e);
function onChange(event) {
var reader = new FileReader();
reader.onload = onReaderLoad;
reader.readAsText(event.target.files[0]);
function onReaderLoad(event){
//alert(event.target.result);
var obj = JSON.parse(event.target.result);
alert(obj);
}
基本上传文件
<input id="contentFile" type="file" accept="application/json" />
document.getElementById('contentFile').onchange =函数(Evt){尝试{ let文件= evt.target.files;if (!files.length) {警报(‘没有选择文件!’);返回;} let file =FileReader;让阅读器=新的FileReader();const = this;reader.onload =(事件) => {console.log(‘文件内容’,event.target.result);};reader.readAsText(文件);} catch (err) { console.error(err);}}
您可能要添加可拖动选项。
Firs创建HTML
<div class="drag" id="drag_area">
<input class="box_file disabled" type="file" name="files[]" id="file" data-multiple-caption="{count} files selected" multiple />
<label for="file"><strong>Choose save file</strong><span class="box__dragndrop"> or drag it here</span>.</label>
</div>
也不愿写出你的JS
$("#drag_area").on('drag dragstart dragend dragover dragenter dragleave drop', function (e) {
e.preventDefault();
e.stopPropagation();
.on('dragover dragenter', function () {
$("#drag_area").addClass('dr_active');
// this is needed if you wish to style your drag area on drag events
.on('dragleave dragend drop', function () {
$("#drag_area").removeClass('dr_active');
// this is needed if you wish to style your drag area on drag events
.on('drop', function (e) {
let droppedFiles = e.originalEvent.dataTransfer.files;
let reader = new FileReader()
reader.readAsDataURL(droppedFiles[0])
reader.onloadend = function () {
$.ajax({
url: reader.result,
success: function (data) {
console.log(JSON.parse(data)); // This is your JSON
error: function (request, error) {
cliLog(2, "Upload", "Cant upload save file")
}),
我提出了一种更通用的方法,支持在加载完成时定制upload按钮标题和回调:
function uploadJson(id, callback) {
document.getElementById(id).onchange = function(evt) {
try {
let files = evt.target.files;
if (!files.length) {
alert('No file selected!');
return;
let file = files[0];
let reader = new FileReader();
const self = this;
reader.onload = (event) => {
callback(event.target.result);
reader.readAsText(file);
} catch (err) {
console.error(err);
uploadJson('importJson', function (json) {
console.log(json);
});
<button onclick="document.getElementById('importJson').click()">import json</button>
<input id="importJson" value="import json" type="file" accept="application/json" style="" />
2021基于承诺的方法
正如前面提到的 这里 ,您可以使用更新的blob轻松地通过以下方法获得文件的值:
await blob.text()
const getJsonUpload = () =>
new Promise(resolve => {
const inputFileElement = document.createElement('input')
inputFileElement.setAttribute('type', 'file')
inputFileElement.setAttribute('multiple', 'true')
inputFileElement.setAttribute('accept', '.json')
inputFileElement.addEventListener(
'change',
async (event) => {
const { files } = event.target
if (!files) {
return
const filePromises = [...files].map(file => file.text())
resolve(await Promise.all(filePromises))
false,
inputFileElement.click()
document.getElementById('upload-button').onclick = async () => {
const jsonFiles = await getJsonUpload()
console.log({jsonFiles})
}
<button id="upload-button">
Upload
</button>
使用更新的Blob,可以通过跳过
当前顶答
来简化
FileReader
。
document.getElementById('import').onclick = function() {
var files = document.getElementById('selectFiles').files;
console.log(files);
if (files.length <= 0) {
return false;
files[0].text().then(function(text) {