Upload files to a remote file server
- you can use a custom integration or library to transfer the file to the remote server after saving it locally. One popular library for transferring files to remote servers is
paramiko.
import paramiko
from frappe.utils.file_manager import save_file
# default Frappe folder
file_doc = save_file(filedata, filename, dt, dn)
hostname = 'remote_server_ip'
username = 'remote_username'
password = 'remote_password'
remote_folder = '/path/to/remote/folder'
# Connect to the remote server using SSH
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, username=username, password=password)
# Transfer the file to the remote server
sftp = ssh.open_sftp()
local_path = file_doc.file_url
remote_path = f"{remote_folder}/{filename}"
sftp.put(local_path, remote_path)
sftp.close()
ssh.close()
IF YOU HAVE NAS (Network Attached Storage) for Storage like Synology then
- you can use various methods such as FTP, SFTP, or SCP. We can transfer files to a using the
paramikolibrary and SFTP:
# Define the Synology NAS details
hostname = 'nas_ip_address'
port = 22 # Default SFTP port for Synology NAS
username = 'nas_username'
password = 'nas_password'
remote_folder = '/path/to/remote/folder'
By Help of this you can achieve some logic to any kind of doctype
- Client Script
frappe.ui.form.on("YourDoctype", {
upload_file_button: function(frm) {
var file_input = document.createElement("input");
file_input.type = "file";
file_input.accept = "image/*"; // Specify the accepted file types here
file_input.onchange = function() {
var file = file_input.files[0];
var reader = new FileReader();
reader.onload = function(e) {
var filedata = e.target.result;
frappe.call({
method: "upload_file_to_remote_server",
args: {
filedata: filedata,
filename: file.name
},
callback: function(response) {
if (response.message) {
frappe.msgprint("File transferred successfully.");
} else {
frappe.msgprint("File transfer failed.");
}
}
});
};
reader.readAsDataURL(file);
};
file_input.click();
}
});
*Server Script
import paramiko
@frappe.whitelist()
def upload_file_to_remote_server(filedata, filename):
remote_hostname = 'remote_server_ip'
remote_username = 'remote_username'
remote_password = 'remote_password'
remote_folder = '/path/to/remote/folder'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(remote_hostname, username=remote_username, password=remote_password)
sftp = ssh.open_sftp()
remote_path = f"{remote_folder}/{filename}"
sftp.putfo(filedata, remote_path)
sftp.close()
ssh.close()
return True
Hope you understand how do that…!
Thanks…!