Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Filereader - upload same file again not working

I have sth like drawing app. User can save projects and then load them. When I load first time one file (for e.g. project1.leds) make some changes in the app but no saving it and then again load same file (project1.leds) nothing happen. I cant load same file more than once. If I load another file, it's working.

Code:

$("#menu-open-file").change(function(e){     var data=[];      var file = null;     file = e.target.files[0];     console.log(file)     var reader = new FileReader();         reader.onload = function(e){             data=JSON.parse(reader.result);             x=data[0].SIZE[0];             y=data[0].SIZE[1];             if(x==15) x=16;             if(x==30) x=32;             if(x==60) x=64;             if(y==15) y=16;             if(y==30) y=32;             if(y==60) y=64;             createLeds(x,y,data,false,false);             clearActiveTools();             var svg = $('#contener').find('svg')[0];                 svg.setAttribute('viewBox','0 0 ' + x*20 + ' ' + y*20);             $("#contener").css("width",x*20).css("height",y*20);             $("#contener").resizable({                 aspectRatio: x/y,                 minHeight: 200,                 minWidth: 200,             });             wiFirst = $("#contener").width();             hiFirst = $("#contener").height();         }         reader.readAsText(file); }); 

Can i delete/remove cached file? Is it even cached in browser?

like image 691
sko Avatar asked Oct 29 '14 15:10

sko


People also ask

What is Err_upload_file_changed?

net::ERR_UPLOAD_FILE_CHANGED. If I understand this error correctly, the file that you are uploading has been modified or changed and therefore Chrome throws an error because it must be selected by the user again.

How do I get the value of an input type file?

The value property returns the path or the name of the file selected with the <input type="file"> element. This property returns the name of the selected file with a fake path in IE, Google Chrome, and Opera, and the name of the selected file in Firefox and Safari.

How do you clear the input file in react JS?

To reset a file input in React, set the input's value to null in your handleChange function, e.g. event. target. value = null . Setting the element's value property to null resets the file input.


2 Answers

It is because you're calling the function onchange. If you upload the same file the value of the file input has not changed from the previous upload and therefore isn't triggered. This also explains why it works if you upload a different file. No need to clear cache, you can work around this by resetting the input field's value after you read the file.

$("#menu-open-file").change(function(e){     var data=[];      var file = null;     file = e.target.files[0];     if(file !== ''){       console.log(file)       var reader = new FileReader();       reader.onload = function(e){             data=JSON.parse(reader.result);             x=data[0].SIZE[0];             y=data[0].SIZE[1];             if(x==15) x=16;             if(x==30) x=32;             if(x==60) x=64;             if(y==15) y=16;             if(y==30) y=32;             if(y==60) y=64;             createLeds(x,y,data,false,false);             clearActiveTools();             var svg = $('#contener').find('svg')[0];                 svg.setAttribute('viewBox','0 0 ' + x*20 + ' ' + y*20);             $("#contener").css("width",x*20).css("height",y*20);             $("#contener").resizable({                 aspectRatio: x/y,                 minHeight: 200,                 minWidth: 200,             });             wiFirst = $("#contener").width();             hiFirst = $("#contener").height();         }         reader.readAsText(file);         $("#menu-open-file")[0].value = '';   } }); 
like image 143
OldGreg Avatar answered Sep 16 '22 12:09

OldGreg


because input is caching the same file value so when you load the same file again it uses the cache to read value property. all you need to do is set a conditional statement when you use input element and set the value property of input to an empty string and it should work

input.value = ""; 

and if you are using an event handler then

e.target.value = ""; 
like image 28
itsCodingThing Avatar answered Sep 19 '22 12:09

itsCodingThing