Python脚本通过FTP上传文件

时间:2012-09-27 03:48:43

标签: python image upload ftp screenshot

我想创建一个脚本来将文件上传到FTP。

登录系统如何运作?我正在寻找这样的东西:

ftp.login=(mylogin)
ftp.pass=(mypass)

还有其他任何凭证。

7 个答案:

答案 0 :(得分:154)

使用ftplib,您可以这样写:

import ftplib
session = ftplib.FTP('server.address.com','USERNAME','PASSWORD')
file = open('kitten.jpg','rb')                  # file to send
session.storbinary('STOR kitten.jpg', file)     # send the file
file.close()                                    # close file and FTP
session.quit()

如果您的FTP主机需要TLS,请使用ftplib.FTP_TLS


要检索它,您可以使用urllib.retrieve

import urllib 

urllib.urlretrieve('ftp://server/path/to/file', 'file')

修改

要查找当前目录,请使用FTP.pwd()

  

FTP.pwd():返回服务器上当前目录的路径名。

要更改目录,请使用FTP.cwd(pathname)

  

FTP.cwd(pathname):设置服务器上的当前目录。

答案 1 :(得分:4)

您很可能想要使用ftplib module for python

 import ftplib
 ftp = ftplib.FTP()
 host = "ftp.site.uk"
 port = 21
 ftp.connect(host, port)
 print (ftp.getwelcome())
 try:
      print ("Logging in...")
      ftp.login("yourusername", "yourpassword")
 except:
     "failed to login"

这会将您登录到FTP服务器。你从那里做什么取决于你。您的问题并未表明任何其他真正需要的操作。

答案 2 :(得分:2)

试试这个:

#!/usr/bin/env python

import os
import paramiko 
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username="username", password="password")
sftp = ssh.open_sftp()
localpath = '/home/e100075/python/ss.txt'
remotepath = '/home/developers/screenshots/ss.txt'
sftp.put(localpath, remotepath)
sftp.close()
ssh.close()

答案 3 :(得分:1)

ftplib 现在supports context managers,所以我想它可以变得更简单


public menu() 
    {
        setTitle("Alkku's AIO");
        setResizable(false);
        getContentPane().setLayout(null);

        JButton btnNewButton = new JButton("Start");
        btnNewButton.setBounds(10, 216, 424, 23);
        getContentPane().add(btnNewButton);

        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu mnNewMenu = new JMenu("Scripts");
        menuBar.add(mnNewMenu);

        JRadioButton rdbtnNewRadioButton = new JRadioButton("Tutorial Island");
        rdbtnNewRadioButton.setSelected(true);
        buttonGroup.add(rdbtnNewRadioButton);
        mnNewMenu.add(rdbtnNewRadioButton);

        JRadioButton rdbtnCombat = new JRadioButton("Combat");
        buttonGroup.add(rdbtnCombat);
        mnNewMenu.add(rdbtnCombat);

        JRadioButton rdbtnFishing = new JRadioButton("Fishing");
        buttonGroup.add(rdbtnFishing);
        mnNewMenu.add(rdbtnFishing);

        JRadioButton rdbtnWoodcutting = new JRadioButton("Woodcutting");
        buttonGroup.add(rdbtnWoodcutting);
        mnNewMenu.add(rdbtnWoodcutting);


        if (rdbtnWoodcutting.isSelected())
        {
            //for each radio button selected i would like to make a new panel + add stuff to it
            JPanel panel = new JPanel();
            getContentPane().add(panel);
            panel.setLayout(null);
            panel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Location", TitledBorder.CENTER, TitledBorder.TOP, null, new Color(0, 0, 0)));
            panel.setBounds(10, 11, 169, 60);


            JComboBox comboBox = new JComboBox();
            comboBox.setBounds(10, 23, 149, 20);
            panel.add(comboBox);
        }
    }

无需关闭文件或会话

答案 4 :(得分:0)

我刚才回答了类似的问题here 恕我直言,如果您的FTP服务器能够与Fabric通信请告诉我们Fabric。它比做原始ftp要好得多。

我有dotgeek.com的FTP帐户,所以我不确定这是否适用于其他FTP帐户。

#!/usr/bin/python

from fabric.api import run, env, sudo, put

env.user = 'username'
env.hosts = ['ftp_host_name',]     # such as ftp.google.com

def copy():
    # assuming i have wong_8066.zip in the same directory as this script
    put('wong_8066.zip', '/www/public/wong_8066.zip')

将文件另存为fabfile.py并在本地运行fab copy

yeukhon@yeukhon-P5E-VM-DO:~$ fab copy2
[1.ai] Executing task 'copy2'
[1.ai] Login password: 
[1.ai] put: wong_8066.zip -> /www/public/wong_8066.zip

Done.
Disconnecting from 1.ai... done.

再一次,如果您不想一直输入密码,只需添加

即可
env.password = 'my_password'

答案 5 :(得分:0)

您可以使用以下功能。我还没有测试过,但它应该可以正常工作。请记住,目标是一个目录路径,其中源是完整的文件路径。

import ftplib
import os

def uploadFileFTP(sourceFilePath, destinationDirectory, server, username, password):
    myFTP = ftplib.FTP(server, username, password)
    if destinationDirectory in [name for name, data in list(remote.mlsd())]:
        print "Destination Directory does not exist. Creating it first"
        myFTP.mkd(destinationDirectory)
    # Changing Working Directory
    myFTP.cwd(destinationDirectory)
    if os.path.isfile(sourceFilePath):
        fh = open(sourceFilePath, 'rb')
        myFTP.storbinary('STOR %s' % f, fh)
        fh.close()
    else:
        print "Source File does not exist"

答案 6 :(得分:0)

为避免出现加密错误,您还可以尝试以下命令

ftp = ftplib.FTP_TLS("ftps.dummy.com")
ftp.login("username", "password")
ftp.prot_p()
file = open("filename", "rb")
ftp.storbinary("STOR filename", file)
file.close()
ftp.close()

ftp.prot_p()确保您的连接已加密