私はftpファイル転送のためにftpsclientを使用しています、それは明示的なtlsです
ここでは私が使用しているコード:
<cfscript>
ftpsClient = CreateObject("java","org.apache.commons.net.ftp.FTPSClient").init(JavaCast("boolean",false));
ftpsClient.connect(JavaCast("string","test.hostedftp.com"),21);
connected = ftpsClient.isConnected();
WriteOutput("Is Connected:" & connected & "<br/>");
reply = ftpsClient.getReplyCode();
WriteOutput("Is reply:" & reply & "<br/>");
login = ftpsClient.login("test","test");
WriteOutput("Is Logged in:" & login & "<br/>");
ftpsClient.enterLocalPassiveMode();
ftpsClient.changeWorkingDirectory("/test");
reply = ftpsClient.getReplyCode();
WriteOutput("Is changeWorkingDirectory:" & reply & "<br/>");
</cfscript>
<cfset fileStream = CreateObject(
"java",
"java.io.FileInputStream"
).Init(
CreateObject(
"java",
"java.io.File"
).Init(
"C:Userstesttest.txt"
)
) />
<cfset storefile = ftpsClient.storeFile("LocalFile.txt", fileStream)>
<cfset replycode = ftpsClient.getReplyCode()>
<cfoutput>#replycode#</cfoutput><br>
<cfset fileStream.close()>
<cfoutput>#storefile#</cfoutput>
しかし、ここにファイルをアップロードしていない "という出力:
Is Connected:YES
Is reply:234
Is Logged in:YES
Is changeWorkingDirectory:250
500
NO
これは店舗返信コードが「500」になった後を意味します。
誰かが助けることができるなら、コードの何が間違っているのか分かりません。
前もって感謝します!
回答:
回答№1は1PROTコマンドを実行してみてください。 enterLocalPassiveMode()行の後に置くことができます
ftpsClient.execPROT("P");
私はそれを私のローカルテストでこのように働かせることができました。
PROTはデータ保護レベルを扱います。もし提供されていなければ、Clearとして送信します。 Pはプライベートを表します。私が推測しているのは、ファイルを安全に転送していないことです。
getReplyString()は何を表示しますか?データチャネルが安全でないことについて何か言いますか?