553 Could not create file.
4.
或者干脆在發(fā)送了LIST命令以后,服務(wù)器沒響應(yīng),超時斷開。
遇到這樣的問題,通常是vsftpd 沒有足夠的權(quán)限,很有可能是被SELinux阻止了。
查看命令:getsebool -a | grep ftp
getsebool -a | grep ftpd #以下是顯示出來的權(quán)限,off是關(guān)閉權(quán)限,on是打開權(quán)限 allow_ftpd_anon_write --> off allow_ftpd_full_access --> off allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftpd_connect_db --> off ftpd_use_passive_mode --> off ftp_home_dir --> off
其中,ftp_home_dir和allow_ftpd_full_access必須為on 才能使vsftpd 具有訪問ftp根目錄,以及文件傳輸?shù)葯?quán)限。
設(shè)置命令:setsebool -p xxxxxx on
[root@bogon ~]# setsebool -P allow_ftpd_full_access on [root@bogon ~]# setsebool -P ftp_home_dir on
1.4 設(shè)置或關(guān)閉防火墻
因?yàn)閒tp默認(rèn)的端口為21,而centos默認(rèn)是沒有開啟的,所以要修改iptables文件
設(shè)置:vi /etc/sysconfig/iptables
在行上面有22 -j ACCEPT 下面另起一行輸入跟那行差不多的,只是把22換成21,然后:wq保存。
還要運(yùn)行下,重啟iptables
重啟:service iptables restart
關(guān)閉防火墻:service iptables stop
禁用防火墻重啟:chkconfig iptables off
1.5 啟動vsftpd
命令:service vsftpd start
java客戶端(代碼)調(diào)用
package com.jonychen.util;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import java.util.Date;
import java.util.UUID;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public class FtpUploadUtil {
private static ThreadLocal<FTPClient> threadLocal = new ThreadLocal<>();
private static ThreadLocal<String> threadLocalHost = new ThreadLocal<>();
public static void init(String host,int port,String username,String password) throws SocketException, IOException {
FTPClient client = threadLocal.get();
if(client==null) {
client = new FTPClient();
//1.連接
client.connect(host,port);
//2.登錄
client.login(username,password);
threadLocal.set(client);
threadLocalHost.set(host);
}
}
public static String upload(InputStream local,String fileName,String path) throws SocketException, IOException {
String datePath = DateUtil.date2Str(new Date(),/yyyy/MM/dd/);
//路徑添加日期
path =datePath;
FTPClient client = threadLocal.get();
String host = threadLocalHost.get();
//3.指定文件上傳路徑(路徑不存在返回false)
boolean exists = client.changeWorkingDirectory(path);
if(!exists) {
String pathArray[] = path.split(/);
String temp = /;
for(String p:pathArray) {
temp =(p /);
//4.如果文件路徑不存在,則創(chuàng)建(一次只能創(chuàng)建一級目錄)
client.makeDirectory(temp);
}
//重新指定文件上傳路徑
client.changeWorkingDirectory(path);
}
//5.指定文件類型
client.setFileType(FTP.BINARY_FILE_TYPE);
//獲取后綴
String suffix = fileName.substring(fileName.lastIndexOf(.));
String uuid = UUID.randomUUID().toString();
//6.執(zhí)行上傳
client.storeFile(uuid suffix, local);
//7.退出
client.logout();
//8.斷開連接
client.disconnect();
threadLocalHost.remove();
threadLocal.remove();
return http:// host /jonychen datePath uuid suffix;
}
public static void main(String[] args) throws SocketException, IOException {
InputStream local = new FileInputStream(D:\\\\\\\\Documents\\\\\\\\Pictures\\\\\\\\01.png);
init(192.168.178.161, 21, ftpuser, 111111);
//上傳路徑
String res = upload(local, code.png,/home/ftpuser/ego);
System.out.println(res);
}
}
總結(jié)
以上所述是小編給大家介紹的linux下vsftpd的安裝及配置使用詳細(xì)步驟,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
更多關(guān)于云服務(wù)器,域名注冊,虛擬主機(jī)的問題,請?jiān)L問西部數(shù)碼官網(wǎng):m.ps-sw.cn