Requirement:
There is form in my html page where we can upload files and post them. After posting the files I wish to save it in the backend and then proceed to the next page of my application in a single click.
my javascript code for submit/posting this form.
submitButton.addEventListener("click", function(event) {
event.preventDefault();
var formData = new FormData(form);
var redirect_url = '{{ url_for("UploadLoads") }}?link=' + link;
fetch(redirect_url , {
method: 'POST',
body: formData
})
.then(response => {
const contentType = response.headers.get("content-type");
if (contentType && contentType.includes("application/json")) {
return response.json().then(data => {
throw new Error(data.message); }
else {
throw new Error("Unknown error occurred");
}
})
.then(data => {
window.location.href = link;
})
.catch(error => {
console.error('Error:', error);
});
window.location.href = link;
});
flask code:
@app.route('/loadsupload', methods=['POST'])
def UploadLoads():
if request.method=='POST':
link = request.args.get('link')
if "date_time" not in session or session["date_time"] == None:
session["date_time"] = datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
if session["date_time"] not in os.listdir(get_session_data("user_dir")):
os.mkdir(get_session_data("session_dir"))
description=[]
for i in range(1,len(request.files)+1):
file = request.files.get(f'file{i}')
if file:
filename = os.path.join(get_session_data("session_dir"), f'file{i}.xlsx')
file.save(filename)
text = request.form.get(f'description{i}', '')
description.append(text)
session['Optitower load description']=description
session['Optitower load family']=request.form['family']
return jsonify({'redirect': link}), 200
@app.route('/CoverForm/<path:variable>', methods=['GET', 'POST'])
@UserPathChecks(check_name = "User Session")
# @GetTime(name="Cover Form Without Userpath", level=" Coverform ")
def CoverForm(variable):
tenders = None
try:
tenders = tender_data()
except:
print("not able to fetch tenders")
...............................................
Logic Explaination
I am using this UploadLoads() function to get the uploaded files and save it the backend. The link variable has url path which I would like to go to as soon as I have exited my UploadLoads() function meaning as soon I as my files are saved, I want my application to go the next page specified by ‘link’ variable.
example of link
link=”CoverForm/” +brd + “/” + url
Problem that I am facing
Sometimes if a click on submit button this uploadloads get activated and my files are saved the way I want them to but the page doesnt move ahead. The second time I hit the submit button the page moves forward skipping the file saving function. So I end up getting two folders in the backend first one which has the files and second which some other data. I want both saving the files and next page to happen in a single click only