判斷ftp上傳成功
腳本ftp.sh如下:
#!/bin/bash
#Usage: sh ftp.sh <ip> <user> <pass> <localdir> <file> <remotedir>
#ftp files
echo "
open $1
passive
prompt off
user $2 $3
binary
lcd $4
cd $6
mput $5
close
bye
" |ftp -v -n |tee autoftp.log >/dev/null
SUCC="226 File receive OK."
RESULT=`grep -I "${SUCC}" autoftp.log`
rm -rf autoftp.log
if [ "${RESULT}" = "${SUCC}" ]
then
#echo "succeed"
exit 0
else
exit 1
fi
注釋:首先登陸ftp,並使用binary方式上傳上傳文件;將ftp輸出的信息重定向到 autoftp.log,然後判斷autoftp.log中是否包含上傳成功的信息;
如果成功,腳本返回0,如不成功,返回1;
在C程序中調用的方法:if (system(:sh ftp.sh %s %s %s %s %s %s:) == 0) printf("上傳成功");
2. 如何測試自己的ftp伺服器是否成功
在IE里輸入ftp://你的外網IP
成功的話就會要賬號和密碼
3. 用vb如何判斷FTP文件是否上傳完畢
用api就判斷下文件大小,
如果用winsock,1可以聽過自定義消息判斷大小,crc什麼的,2可以通過每部分數據是否都傳送成功
4. 使用FTP時,怎樣知道文件已經正確上傳了
傳輸完成後,右下角會出現傳輸完成的提示和一些參數,然後你可以打開右邊的目錄,查看有沒有你這次上傳的文件。祝你成功。
5. java 怎麼判斷ftp上傳成功
private String ipAddr;//ip地址
8
9 private Integer port;//埠號
10
11 private String userName;//用戶名
12
13 private String pwd;//密碼
14
15 private String path;//aaa路徑
16
17 public String getIpAddr() {
18 return ipAddr;
19 }
20
6. ftp伺服器端怎麼判斷一個文件已經傳送完成
首先,我不清楚你說的這個和我理解的是不是同一個概念。剛好之前寫過一個文件伺服器的小代碼,可以稍微分享一下。
伺服器首先read文件,read之後會有一個返回值,假設你每次read 1024個位元組,當返回值小於1024,表示已經文件已經read結束。read之後send發送文件(阻塞式),在發送完所有文件斷開連接,這時伺服器又會發送一個FIN給客戶端。(注意這里讀文件,發文件在一個大循環,循環的判斷條件就是read的位元組數)。對應客戶端接收文件也是在一個大循環里,recv阻塞式的接收文件,然後將接收到的內容寫入自己建立的空文件中,在recv的返回值為0的時候,表示接收已經結束,跳出循環,繼而斷開連接。
可能有人會有疑問,當接收完文件,斷開連接,伺服器不也就結束了嗎?其實我當時寫的伺服器有伺服器和客戶端建立了兩條TCP連接,一條用於客戶端向伺服器請求文件,另一條用於伺服器向客戶端發送文件,這樣即使下面一條連接斷開,伺服器和客戶端也不會終止,從而實現該客戶端還可以再次請求文件,同時伺服器也可以處理其他客戶端的請求(第二條連接是在客戶端向伺服器請求文件,並且伺服器有你請求的文件時建立的)。
多客戶端連接伺服器有兩種方式,一種是通過伺服器fork生成子進程,用子進程去處理和客戶端的數據傳輸,而父進程的功能就是監聽是否有子進程過來連接。還有一種方式就是通過epoll來實現(與select和poll思想相同)。
以上所有內容都是自己敲上去的,可能說的有不對或是不確切的地方,希望看見的人能提出指正,謝謝。
7. 用shell 腳本登陸遠程ftp 1.如何確認ftp連接成功2.如何確認文件是否上傳成功3.如何返回一些參數信息
在上傳的機器寫個驗證腳本。用cron定時執行。
8. Ftp判斷文件是否上傳成功批處理
開下面這個批處理是否能實現你的要求,
從另一台ftp去判斷
@echo off
rem 指定FTP用戶名
set ftpUser=asx
rem 指定FTP密碼
set ftpPass=asx-asx
rem 指定FTP伺服器地址
set ftpIP=172.19.103.42
rem 指定待下載的文件位於FTP伺服器的什麼位置
set ftpFolder=/export/home/PROD/ntcdata
rem 指定從FTP下載下來的文件存放到什麼地方
set DownFolder=D:\AppServ\www\BadDut\data\tbin\wright\nttbin-st
set DownFolder2=D:\AppServ\www\BadDut\data\tbin\wright\nttbin-o
set DownFolder3=D:\AppServ\www\BadDut\data\summary\wright\ntsummary_st
set DownFolder4=D:\AppServ\www\BadDut\data\summary\wright\ntsummary_o
rem 指定下載幾天前的文件
set DaysAgo=1
set ftpDir=%temp%\TempDir.txt
set ftpDown=%temp%\TempDown.txt
rem 假設本機日期格式為yyyy-mm-dd
set FileY=%date:~0,4%
call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
set /a PassDays-=DaysAgo
call :DaysToDate %PassDays% DstYear DstMonth DstDay
>"%ftpDir%" echo.%ftpUser%
>>"%ftpDir%" echo.%ftpPass%
>>"%ftpDir%" echo bin
>>"%ftpDir%" echo cd "%ftpFolder%"
>>"%ftpDir%" echo dir * "%temp%\FileList.txt"
>>"%ftpDir%" echo bye
start ftp -v -i -s:"%ftpDir%" %ftpIP%
rem 根據實際情況自行調節延遲時間
ping -n 350 127.1 >nul
findstr /i ":*\.SWM$" "%temp%\FileList.txt">"%temp%\FileDate.txt"
findstr /i ":*\.TWM$" "%temp%\FileList.txt">>"%temp%\FileDate.txt"
findstr /i ":*\.OWM$" "%temp%\FileList.txt">>"%temp%\FileDate.txt"
>"%ftpDown%" echo.%ftpUser%
>>"%ftpDown%" echo.%ftpPass%
>>"%ftpDown%" echo bin
>>"%ftpDown%" echo cd "%ftpFolder%"
(for /f "usebackq tokens=1-9 delims= " %%a in ("%temp%\FileDate.txt") do (
setlocal enabledelayedexpansion
if "%%f" equ "Jan" (
set FileM=01
) else if "%%f" equ "Feb" (
set FileM=02
) else if "%%f" equ "Mar" (
set FileM=03
) else if "%%f" equ "Apr" (
set FileM=04
) else if "%%f" equ "May" (
set FileM=05
) else if "%%f" equ "Jun" (
set FileM=06
) else if "%%f" equ "Jul" (
set FileM=07
) else if "%%f" equ "Aug" (
set FileM=08
) else if "%%f" equ "Sep" (
set FileM=09
) else if "%%f" equ "Oct" (
set FileM=10
) else if "%%f" equ "Nov" (
set FileM=11
) else if "%%f" equ "Dec" (
set FileM=12
)
set FileD=10%%g
set FileD=!FileD:~-2!
if "!FileM!" equ "%DstMonth%" (
if "!FileD!" equ "%DstDay%" (
echo get "%%i" "%DownFolder%\%%i"
)
)
endlocal
))>>"%ftpDown%"
>>"%ftpDown%" echo bye
start ftp -v -i -s:"%ftpDown%" %ftpIP%
rem 根據實際情況自行調節延遲時間
ping -n 700 127.1 >nul
/y "%DownFolder%\*.*" "%DownFolder2%"
ping -n 800 127.1 >nul
/y "%DownFolder%\*.*" "%DownFolder3%"
ping -n 900 127.1 >nul
/y "%DownFolder%\*.*" "%DownFolder4%"
goto :eof
:DateToDays %yy% %mm% %dd% days
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %4=%j%&goto :EOF
:DaysToDate %days% yy mm dd
setlocal ENABLEEXTENSIONS
set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF
批處理的思路是當你的A的FTP沒上傳一個文件時把這個文件上傳的路徑和完整名字記錄到一個指定的.txt文件內,然後下次上傳的時候把總目錄和這個已上傳文件比對,沒有則上傳,這個批處理還得高人指教你。
最簡單的方法是你在當前文件夾用dir /s /a /b >all.txt
然後你有新文件需要上傳到時候再次用dir /s /a /b >new-all.txt
比對all.txt 和new-all.txt這個完全可以用很多比對文件的軟體來比對Beyond Compare 來比對
9. 怎麼判斷FTP一個文件已經上傳完畢
我做過這個,說下我的思路。
將錯誤輸出導出到文件err.log,方便後續檢查。ftp連接是否成功和文件上傳是否成功都可以通過這個來檢查。
(ftp -i -n $FTP_HOST $FTP_HOST_PORT <<FTPEOF
user $FTP_USER $FTP_PASSWORD
cd $FTP_DIR
$TRANS_MODE
put $FTP_FILENAME
quit
FTPEOF
) 2>>err.log
if [ -s err.log ]; then #文件存在且不為空
echo "FTP連接和文件上傳都成功"
else
#你可以測試一下失敗的情況看下錯誤信息
#然後用grep通過在err.log文件中查找關鍵字方法來確認是FTP連接失敗還是文件上傳失敗。
fi
返回一些參數信息不知道什麼意思。
你是要用另一個腳本來調用這個腳本嗎?還是就做在一個腳本里?
10. 用ftp傳輸文件時是怎樣校驗文件傳送成功
文件損失,不完整,導致傳輸過程驗證失敗。
文件使用中,比如在殺毒或者編輯中的文件,系統佔用是不能傳輸的。
許可權不足,比如針對某些用戶,是不能傳輸部分文件的,比如exe等風險文件。
特殊情況,比如文件傳輸過程中,目錄滿了,存儲失敗,這個是由伺服器管理員控制的,如果目錄體積不夠文件傳輸的,聯系管理員協商解決。