1

There are 2 functions or views located in the same file version.py, one for upload the other for downloading that file. The issue is that the send_file function keeps changing directories while opening the file. Code 1: File Upload function:

                binfile = form.binfile.data
                filename = secure_filename("arduino.bin")
#without the app folder
                binfile.save(os.path.join(
                    app.config['UPLOAD_FOLDER'], 
                    device_names.farm_id, 
                    device_names.mqtt_id, 
                    filename))
                flash('File Uploaded', 'success')

File Download Function:

file_path = os.path.join(
                    app.config['UPLOAD_FOLDER'], 
                    farm_id, 
                    device_id, 
                    'arduino.bin')
                print(file_path)
                response = make_response(send_file(
                    file_path, 
                    mimetype='application/octet-stream',
                    as_attachment=True
                    ))
                response.headers['x-MD5'] = md5(file_path)
                print(response.headers)
                return response, 200

Here the file gets uploaded to the project root folder. When I send a request for this file, I get this error:

[Errno 2] No such file or directory: ‘/home/maxwell/Desktop/python/aquaponics-monitor/app/firmware-manager/FARM0/node2/arduino.bin’

When I manually move the file to the 'app' folder I get no errors and a 200 response code while requesting. So I assume that the function is looking for the file inside the 'app' folder. I changed the upload location by adding 'app' to the path while uploading.

Code 2: File Upload Function:

                binfile = form.binfile.data
                filename = secure_filename("arduino.bin")
#app folder included
                binfile.save(os.path.join(
                    'app',
                    app.config['UPLOAD_FOLDER'], 
                    device_names.farm_id, 
                    device_names.mqtt_id, 
                    filename))
                flash('File Uploaded', 'success')

The file download function is the same as code 1. For this code I get this error:

[Errno 2] No such file or directory: ‘firmware-manager/FARM0/node2/arduino.bin’

The file download function now looks in the project root folder. I manually moved the file to the root folder this time and I again get a status code 200 and no errors when I send a request for it. The only code change I made in the entire application is adding 'app' to the path in the File Upload function. Why is this happening?

user2726634
  • 77
  • 2
  • 12

0 Answers0