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
paramiko
library 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…!