I have a server where i have installed frappe framework and LMS app
I when i upload any video or pdf in the lessons it gets save in
sites/site1.local/public/files for public files and
sites/site1.local/private/files for private files
I only have 50 GB storage in that server and one lesson can be of 100+ MB
I cannot increase the server space as its a virtual server.
I want to change the file save location to a different Location outside my server
I have a Network Drive in which I want to store that video and PDF Files
Is there any way to do it.
Use Hooks for it.
after_insert: move the file to different location and update the path in file doctype
For uploading a document to the network drive, you first need to configure your drive in Frappe with an API key.
hooks.py:
doc_events = {
"File": {
"after_insert": "custom_app_name.controller.file_upload_to_drive",
"on_trash": "custom_app_name.controller.delete_from_drive"
}
}
controller.py
//for uploading files to drive
def file_upload_to_drive(doc, method):
"""
Check and upload files to the network drive.
"""
path = doc.file_url
# Implement authentication and connection logic for the network drive
# Get file metadata and content type
file_path = path
file_name = os.path.basename(file_path)
content_type, _ = mimetypes.guess_type(file_path)
# upload the file to the network drive
for deleting files from your network drive:
def delete_from_network_drive(doc, method=None):
"""Delete file from network drive"""
if doc.file_url:
# Modify this function to delete the file from the network drive
delete_from_drive(doc.file_url)
def delete_from_drive(file_path):
"""
Deletes a file from the network drive.
"""
# Implement the logic to delete the file from the network drive
pass
2 Likes
@Manav_Mandli
Thank you for your response
will this code works for my all files in all the apps of that website or i need to write different code for my custom app and frappe.
You mentioned controller.py file but when i searched the files directory i didn’t find any file name like this do i need to create a new file for that
Hi,
You don’t need to write a different code. With this code, you can upload your files from anywhere and it will automatically upload to your network drive. Yes, you should create a controller.py file in the same directory as the hook.py file in your custom_app.
Hi, I’m currently testing file storage in Frappe by setting the file path to “D://attachments” on my Windows . My goal is to eventually transfer file storage to an external storage system. Will files be saved to this directory during the test, and will the file paths update accordingly when files are attached? Additionally, when moving to external storage server(Hard disk), will Frappe handle the path change dynamically when I update the file path? Please guide on this