⑴ 有關java上傳和File以及FileInputStream的區別
1:PostUploadInfo的js是頁面<ai:fileupload標簽自動載入的AIFileUpload.js里的方法
這里的ActionDocumentInfo.java注意與FtpUtilPro.java(它的一個upload方法有bug)的對比能
看出後者的bug.
從這個bug要看出File與FileInputStream的區別,File不屬於流,它只是用來屏閉不同文件系統,用來統一
描述文件的實體BEAN,new File時給它傳入文件名稱或是路徑,它就會去根據參數查找對應的文件屬性然友襪後封裝
成實體。用來處理判斷該路徑是一個文件還是路徑,文件或路徑的許可權,修改時間等等,路徑的子路徑list等等目錄操作。
File不屬於文件流,只能代表一個文件或是目錄的路徑名而已.
而FileInputStream關注的是文件的內容,是用來進行文件讀寫等操作的二進制流類。大多數情況下,構造FileInputStream
時傳遞一個File對象做參數,也可以直接傳遞簡返String的文件路徑。
這個容易混淆的問題在FTP時候很容易出現,因為客戶端點擊瀏覽本地文件後在上傳時在伺服器端如果直接把客戶端的
文件名稱拿到,然後用new File(「文件名稱路徑」),再用new InputStream(File)來上傳到FTP的話,其實就是相當於伺服器
端在伺服器本地找File(「文件名稱路徑」),然後往攔告飢FTP上傳,這是錯誤的。我們希望的是上傳客戶端的文件,而不是
伺服器端的文件,所以這里應該是直接用apache的FileItem.getInputStream的結果直接upload,如下:
InputStream fileIn = item.getInputStream();////如果直接寫成這樣new FileInputStream(filePath);就會出現在伺服器本機找file上傳的問題
//可以查看item.getInputStream()最後其實是從memoryOutputStream(內存里記憶的客戶端文件流)來取流的句柄的。
以下是正確的實現
[code]
/**上傳附件的時候調用
* @param request
* @param response
* @throws Exception
*/
public void doUpload(HttpServletRequest request, HttpServletResponse response) throws Exception {
CustomProperty cp = CustomProperty.getInstance();
try {
//調用apache控制項上傳文件,返回數組,第一個存放文件對象,第二個存放參數對象
Object obj[] = ApacheUploadTool.getUploadFileInfo(request);
List fileList = (List)obj[0];
Map paras = (Map)obj[1];
if(fileList == null || fileList.size()==0){
cp.set("MESSAGE","找不到上傳的文件");
return;
}
String aVirtualFileName="";
String newId="";
String newFileName="";
String aFileType ="";
String docSize = "";
String editMode = HttpUtil.getParameter(request, "edit_mode");
String objectId = HttpUtil.getParameter(request, "OBJECT_ID");
String busiType = HttpUtil.getParameter(request, "BUSI_TYPE");
// 陳超調試修改添加的輸出
// System.out.println("================"+editMode);
//保存附件信息
for(int i=0;i<fileList.size();i++){
FileItem item = (FileItem)fileList.get(i);
//獲取文件流、文件名稱
String fileName = fixFileName(item.getName());
IDocumentInfoSV i = CommonService.getIDocumentInfoSV();
docSize = String.valueOf(item.getSize());
String codetype = String.valueOf(StaticValue.CFG_FTP_PATH_CODE);
String ftpPathName = BaseDataCodeAction.getCodeName(codetype, busiType);
if(null==ftpPathName||"".equals(ftpPathName)){
throw new Exception("沒有該業務對應的FTP路徑配置!");
}
// 陳超調試的注釋
// System.out.println("ftpPathName="+ftpPathName);
FtpUtil ftpUtil = new FtpUtil(ftpPathName);
// FtpUtilPro ftpUtil = new FtpUtilPro(ftpPathName);
// 陳超添加的調試輸出
// System.out.println("item=="+item);
// System.out.println("item.getInputStream()=="+item.getInputStream());
InputStream fileIn = item.getInputStream();//new FileInputStream(filePath);//如果直接寫成這樣就會出現在伺服器本機找file上傳的問題
//可以查看item.getInputStream()最後其實是從memoryOutputStream(內存里記憶的客戶端文件流)來取流的句柄的。
//獲取新的文件名,判斷是否存在
IBODocumentInfoValue[] retValues = CommonService.getIDocumentInfoSV().queryDocumentInfoList(Long.parseLong(busiType), Long.parseLong(objectId));
for(int j=0;j<retValues.length;j++){
String docName = retValues[j].getDocumentName();
if(fileName.equals(docName)){
ExceptionUtil.throwBossException(83000015,new String[]{fileName});
}
}
newFileName = fileName;
if(editMode.equals("addNew")){
// 陳超添加的調試輸出
// ftpUtil.upload(fileName, fileIn,FtpUtil.BIN);
ftpUtil.upload(fileName, fileIn,FtpUtil.BIN);
}
else if (editMode.equals("modify")) {
// System.out.println("================"+HttpUtil.getParameter(request, "DOCUMENT_ID"));
String oldId = HttpUtil.getParameter(request, "DOCUMENT_ID");
IBODocumentInfoValue acond = new BODocumentInfoBean();
acond.setDocumentId(Long.parseLong(oldId));
// 陳超更改查詢STATE為1
acond.setState(1);
IBODocumentInfoValue[] beanValues = i.getDocumentInfo(acond,"",null);
if(null == beanValues || beanValues.length==0){
throw new Exception("沒有文檔信息");
}
IBODocumentInfoValue beanValue = beanValues[0];
String oldFileName = beanValue.getDocumentName();
ftpUtil.upload(oldFileName, fileIn,FtpUtil.BIN);
}
if(i==0){
aVirtualFileName = newFileName;
}else{
aVirtualFileName = aVirtualFileName + "," + newFileName;
}
}
cp.set("IsOk","TRUE");
cp.set("MESSAGE", "附件"+aVirtualFileName+"上傳成功!");
cp.set("VIRTUAL_FILE_NAME_LIST", aVirtualFileName);
cp.set("DOCUMENT_ID", newId);
cp.set("DOCUMENT_SIZE", docSize);
} catch (Exception ex) {
cp.set("IsOk","FALSE");
cp.set("MESSAGE",StaticValue.SYS_ERROR_INFO);
log.error(ex);
if(!ex.equals("")){
cp.set("MESSAGE",ExceptionUtil.getBossExceptionHint(ex));
}
}finally{
ApacheUploadTool.showFileUploadMsg(response,cp);
}
}
[/code]
附件是自己的ftp實現示例,和一些網上最簡單的jsp上傳的代碼,也最能說明原理
⑵ win7訪問rethat vsftpd 報錯 425
1,根據你的提示問題是比較簡單的。
首先在windows 命令符下,普通使用的是Port模式,所以客戶機的防火牆擋住了一些高端埠的出口。
在這種情況下,你開啟Win7客戶端防火牆,開放一些1025,到65500這些埠即可實現正常訪問。
其次,你可以使用FTP工具來下載,比如Filezilla,FlashFTp。這樣的工具,他們會有被動模式直接開啟的功能 。
2,你提示的下面的這個配置方式,如果要開啟Linux防火牆讓睜,也要客戶端能用被動模式能訪問,還在添加如下的埠:這些埠根據你的配置中的設定來添加,下面的命令只是一個假定
iptables -t filter -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 65400:64100 -j ACCEPT
service iptables save && service iptables restart.
iptables -nL
這樣用戶就可以用被動模式來訪問了。
PASV_enable=YES 開啟被動模式
PASV_min_port=%number% 被動模式最判歷低埠
PASV_max_port=%number% 被動模式最高端掘滑搜口
3,的確。Selinux會影響Vsftpd伺服器的訪問,不過不一定是絕對的。在有些版本可能 沒有問題的。
有問題的話,你可以搜索selinux vsftpd 網路搜索。可以找到辦法來解決這個的。
如果想直接關掉這 selinux.
vi /etc/sysconfig/selinux
將其第一項改為disable
具體也可以搜索。
⑶ resttemplate怎麼上傳文件流
定義一個簡單的restful介面
@RestController
public class TestController
{
@RequestMapping(value = "testPost", method = RequestMethod.POST)
public ResponseBean testPost(@RequestBody RequestBean requestBean)
{
ResponseBean responseBean = new ResponseBean();
responseBean.setRetCode("0000");
responseBean.setRetMsg("succ");
return responseBean;
}
}
使用RestTemplate訪問該服務
//請求地址
String url = "";
//入參
RequestBean requestBean = new RequestBean();
requestBean.setTest1("1");
requestBean.setTest2("2");
requestBean.setTest3("3");
RestTemplate restTemplate = new RestTemplate();
ResponseBean responseBean = restTemplate.postForObject(url, requestBean, ResponseBean.class);
從這個例子可以看出,使用restTemplate訪問restful介面非常的簡單粗暴無腦。(url,
requestMap, ResponseBean.class)這三個參數分別代表 請求地址、請求參數、HTTP響應轉換被轉換成的對象類型。
RestTemplate方法的名稱遵循命名約定,第一部分指出正在調用什麼HTTP方法,第二部分指示返回的內容。本例中調用了restTemplate.postForObject方法,post指調用了HTTP的post方法,Object指將HTTP響應轉換為您選擇的對象類型。還有其他很多類似的方法,有興趣的同學可以參考官方api。
三.手動指定轉換器(HttpMessageConverter)
我們知道,調用reseful介面傳遞的數據內容是json格式的字元串,返回的響應也是json格式的字元串。然而restTemplate.postForObject方法的請求參數RequestBean和返回參數ResponseBean卻都是java類。是RestTemplate通過HttpMessageConverter自動幫我們做了轉換的操作。
默認情況下RestTemplate自動幫我們注冊了一組HttpMessageConverter用來處理一些不同的contentType的請求。
如StringHttpMessageConverter來處理text/plain;來處理application/json;來處理application/xml。
你可以在org.springframework.http.converter包下找到所有spring幫我們實現好的轉換器。
如果現有的轉換器不能滿足你的需求,你還可以實現org.springframework.http.converter.HttpMessageConverter介面自己寫一個。詳情參考官方api。
選好了HttpMessageConverter後怎麼把它注冊到我們的RestTemplate中呢。
RestTemplate restTemplate = new RestTemplate();
//獲取RestTemplate默認配置好的所有轉換器
List<HttpMessageConverter> messageConverters = restTemplate.getMessageConverters();
//默認的在第7個 先把它移除掉
messageConverters.remove(6);
//添加上GSON的轉換器
messageConverters.add(6, new GsonHttpMessageConverter());
這個簡單的例子展示了如何使用GsonHttpMessageConverter替換掉默認用來處理application/json的。
四.設置底層連接方式
要創建一個RestTemplate的實例,您可以像上述例子中簡單地調用默認的無參數構造函數。這將使用java.NET包中的標准Java類作為底層實現來創建HTTP請求。
但很多時候我們需要像傳統的HttpClient那樣設置HTTP請求的一些屬性。RestTemplate使用了一種很偷懶的方式實現了這個需求,那就是直接使用一個HttpClient作為底層實現......
//生成一個設置了連接超時時間、請求超時時間、異常最大重試次數的httpClient
RequestConfig config = RequestConfig.custom().setConnectionRequestTimeout(10000).setConnectTimeout(10000).setSocketTimeout(30000).build();
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultRequestConfig(config).setRetryHandler(new (5, false));
HttpClient httpClient = builder.build();
//使用httpClient創建一個ClientHttpRequestFactory的實現
ClientHttpRequestFactory requestFactory = new (httpClient);
//ClientHttpRequestFactory作為參數構造一個使用作為底層的RestTemplate
RestTemplate restTemplate = new RestTemplate(requestFactory);
五.設置攔截器(ClientHttpRequestInterceptor)
有時候我們需要對請求做一些通用的攔截設置,這就可以使用攔截器進行處理。攔截器需要我們實現org.springframework.http.client.ClientHttpRequestInterceptor介面自己寫。
舉個簡單的例子,寫一個在header中根據請求內容和地址添加令牌的攔截器。
public class TokenInterceptor implements ClientHttpRequestInterceptor
{
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException
{
//請求地址
String checkTokenUrl = request.getURI().getPath();
//token有效時間
int ttTime = (int) (System.currentTimeMillis() / 1000 + 1800);
//請求方法名 POST、GET等
String methodName = request.getMethod().name();
//請求內容
String requestBody = new String(body);
//生成令牌 此處調用一個自己寫的方法,有興趣的朋友可以自行google如何使用ak/sk生成token,此方法跟本教程無關,就不貼出來了
String token = TokenHelper.generateToken(checkTokenUrl, ttTime, methodName, requestBody);
//將令牌放入請求header中
request.getHeaders().add("X-Auth-Token",token);
return execution.execute(request, body);
}
}
創建RestTemplate實例的時候可以這樣向其中添加攔截器
RestTemplate restTemplate = new RestTemplate();
//向restTemplate中添加自定義的攔截器
restTemplate.getInterceptors().add(new TokenInterceptor());
⑷ 如何寫一個shell腳本用sftp上傳文件
主要步驟如下:1.為運行shell腳本的本地用戶生成密鑰對
2.將其中的公鑰分發到sftp欲登錄的遠程伺服器上
3.編寫並以上面的本地用戶運行shell腳本
一.生成密鑰對
在shell腳本中使用sftp時必須用到密鑰對(公鑰和私鑰).可使用下列方式生成(SSH 2.X版本),這里本地用戶記為:local_user:
$ ssh-keygen -dsa
屏幕提示:
Generating public/private dsa key pair.
Enter file in which to save the key (/home/local_user/.ssh/id_dsa):
# 按回車保存為: /home/local_user/.ssh/id_dsa,即當前用戶local_user的私鑰
Enter passphrase (empty for no passphrase):
# 按回車,表示讀取密鑰時不需要密鑰的密碼
Enter same passphrase again:
# 確認密鑰的密碼,必須和上面的輸入相同
Your identification has been saved in /home/local_user/.ssh/id_dsa.
# 私鑰保存信息
Your public key has been saved in /home/local_user/.ssh/id_dsa.pub.
# 公鑰保存信息
The key fingerprint is:
ec:41:e8:08:38:0b:f8:1e:bc:92:98:32:fc:d7:69:7d ...
# 密鑰指紋
二.分發公鑰
為了使用密鑰,必須將公鑰分發到欲登錄的遠程伺服器上,這里遠程伺服器記為remote_host,欲登錄的遠程用戶記為remote_user
1.公鑰到欲登錄的遠程伺服器的遠程用戶的家目錄下,例如:
id_dsa.pub到remote_host:/home/remote_user/.ssh/
若目錄/home/remote_user/.ssh/不存在,請先創建之.
2.將來的公鑰文件改名為authorized_keys
3.修改公鑰文件的訪問許可權
chmod 644 authorized_keys
三.示例
目標:
從遠程伺服器remote_host:/home/remote_user/data/
傳送下列文件到本地計算機的當前目錄: /home/local_user/data/:
20050201
20050202
20050203
20050204
20050205
方式1: 批模式
sftp提供了一個選項-b,用於集中存放sftp命令(該選項主要用於非交互模式的sftp).因此對於上面的目標,可以生成如下的命令文件:
cd /home/remote_user/data/
lcd /home/local_user/data/
-get 20050201 .
-get 20050202 .
-get 20050203 .
-get 20050204 .
-get 20050205 .
quit
這里存為: sftp_cmds.txt
說明: get命令前加一個"-"以防止其執行錯誤時sftp執行過程被終止.
以下為腳本示例:
#!/bin/sh
sftp -b ./sftp_cmds.txt remote_user@remote_host
方式二:
#!/bin/sh
sftp remote_user@remote_host << EOF
cd /home/remote_user/data/
lcd /home/local_user/data/
-get 20050201 .
-get 20050202 .
-get 20050203 .
-get 20050204 .
-get 20050205 .
quit
EOF
⑸ FTP伺服器!
在所有的FTP伺服器端軟體中,Serv-U除了擁有其他同類軟體所具備的幾乎全部功能外,還支持斷點續傳、支持帶寬限制、支持遠程管理、支持遠程列印、支持虛擬主機等;再加上良好的安全機制、友好的管理界面及穩定的性能,使它贏得了很高的贊譽,並被非常廣泛地使用著。本文將從Serv-U的安裝和設置方面入手向你介紹這種優秀軟體的最基本使用方法。
一、Serv-U的基本情況
軟體名稱:FTP Serv-U(共享軟體,30天使用限制)
運行環境:除Windows 3.x之外的全系列版本Windows中
下載地址:http://www.skycn.com/soft/1240.html
二、Serv-U的安裝和卸載
1.Serv-U的安裝
直接雙擊下載所得到的susetup1.exe文件即可開始其安裝工作。除了在出現使用協議那一步中,需要先勾選中I have read and accept the above license agreement(我已經閱讀並接受以上協議)再按Next(下一步)按鈕之外,其他均使用其默認選項即可。
當安裝完成後,系統將自動進入Serv-U Administrator(以下簡稱"管理器")的窗口,同時出現Setup Wizard(安裝向導),此時就可以根據這個向導開始建立你的第一個FTP伺服器了。(如圖1)
2.Serv-U的卸載
選"開始→程序→Serv-U FTP Server"下的Remove Serv-U(卸載),再根據需要按提示操作即可。
三、建立第一個FTP伺服器
為了說明方便起見,筆者在這里假設你的本機IP地址是192.168.0.1,本機計算機名為WY,你想在自己的區域網中建立一個只允許匿名訪問(Anonymous)的FTP伺服器,匿名用戶登錄後進入的將是D:\wy目錄。
在安裝向導中,一般建議除了以下幾個需要修改的地方之外,對於初學者來說,其他部分一律選其默認選項(直接按Next按鈕)即可。
1.當進行到有Anonymous home directory(匿名用戶的主目錄)提示的一步時,單擊其右側的箱子圖標選擇好目標目錄D:\wy後再按Next(下一步)按鈕繼續。(如圖2)
2.當進行到有Create named account(建立名字賬戶)提示的一步時,選中No(不)一項後再按Next(下一步)按鈕繼續。
當配置完成後,即可以在管理器左邊框架的Domains(域名)下看到有個Wizard Generated Domain項,其下的Users(用戶)中就包含了一個名為Anonymous的賬戶,此賬戶登錄後的虛擬根目錄(主目錄)即為D:\wy目錄。(如圖3)
此FTP伺服器地址為192.168.0.1(或用此伺服器的計算機名WY也可),默認埠號為21,只允許用匿名賬號Anonymous登錄。
-------
Serv-U安裝向導(Setup Wizard)主要內容詳解
1.IP address ,leave blank for dynamic or unknown IP(IP地址,如果是動態IP或不知道IP則保持為空):此項需要填入你欲為此FTP伺服器綁定的IP地址。除非你的計算機有多個固定的IP地址,並且你只想其中一個被FTP伺服器所使用時,才需要在此地輸入那個相應的IP地址;否則一般建議,不管你是否有固定的IP地址,都請保留此項為空。
2.Domain name(域名):此處填入你FTP伺服器的域名。但域名是由DNS解析而不是由這里決定的,因此實際上你可以填入任意內容--比如像"我的第一個FTP伺服器"這種對此FTP進行說明的文字。
3.Install as system service(作為一個系統服務安裝嗎):此項對於操作系統是Windows NT/2000/XP的伺服器有效。選擇了Yes(是),則Serv-U的FTP服務就會被添加到系統服務中(在"管理工具"下的"服務"中可以查看到);選擇了No(否),則不會做為系統服務存在。如果你的FTP伺服器是常年運行的,則建議選Yes(是);如果只是需要時才運行,則建議選No(否)。
4.Allow anonymous access(接受匿名登錄嗎):如果你想讓此FTP伺服器接受匿名登錄,則此處必須選擇Yes(是);否則選No(否)。
5.Anonymous home directory(匿名用戶的主目錄):此處可設定匿名用戶登錄後其虛擬根目錄在FTP伺服器上的真實位置。
6.Lock anonymous users in to their home directory(將匿名用戶鎖定到其主目錄嗎):如果選擇Yes(是),則匿名用戶只能訪問其主目錄及以下的目錄樹;如果選擇No(否),則它還可以訪問其主目錄的同級或更高級的目錄樹。從安全形度考慮,一般建議選Yes(是)。
7.Create named account(建立命名賬戶嗎):這里詢問是否直接建立普通用戶(相對匿名用戶而言)賬號。
--------
四、常見基本操作
在根據安裝向導建立好你的第一個FTP伺服器後,只能實現Serv-U賦予的默認功能和許可權,要真正讓這個伺服器能被你自己隨心所欲地控制,則還需要經過一些其他後續操作。
1.客戶端的連接
在IE瀏覽器(Internet Explorer)中,客戶端的訪問格式為ftp://192.168.0.1,不需要輸入用戶名和密碼;在DOS(或命令提示符)狀態下,客戶端的訪問格式為ftp -A 192.168.0.1,也不需要輸入用戶名和密碼;在專業的FTP客戶端軟體設置中,以CuteFTP Version 4.2中文版為例,在"站點管理器"的"FTP主機地址"處輸入192.168.0.1,再選中"登錄類型"下的"匿名連接"項即可,同樣不需要輸入用戶名和密碼。
-------
說明
1.在以上客戶端的連接中,IP地址192.168.0.1也可以用計算機名WY來代替。
2.除了在ftp -A 192.168.0.1中的"A"一定要大寫外,其他處均不區分大小寫。
3.如果在DOS下用ftp 192.168.0.1的格式進行登錄,則需要輸入匿名登錄的用戶名Anonymous,此時密碼為空(直接回車)或為其他任意值。
-------
2.對FTP用戶的管理
欲增加一個新用戶(包括增加Anonymous用戶),則在管理器的左邊框架中選中Users(用戶),然後單擊右鍵,進入New User(新用戶),依次根據提示為它設置好User Name(用戶名)、Password(密碼)、Home directory(主目錄)等即可完成。
欲刪除一個用戶,則在此用戶上單擊右鍵,選Delete User(刪除用戶)即可。
欲復制一個用戶,則在此用戶上單擊右鍵,選Copy User(復制用戶),則會多出一個名字如Copy of xxx格式的新用戶,它除了用戶名和源用戶不同外,其他部分--包括密碼、主目錄、目錄許可權等等--均與之完全一致。
欲暫時禁止一個用戶的登錄許可權,只需先在左邊框架中選中此用戶,然後在右邊框架中進入Account(賬戶)窗口,勾選中Disable account(禁止賬戶)即可。
3.對目錄許可權的管理
在管理器左邊框架中選中用戶名,再在右邊框架中進入Dir Access(目錄存取)窗口,然後在列表中選中相應目錄後,就可以在窗口的右側更改當前用戶對其的訪問許可權了。(如圖4)
-------
說明
1.Read(讀):對文件進行"讀"操作(復制、下載;不含查看)的權力。
2.Write(寫):對文件進行"寫"操作(上傳)的權力。
3.Append(附加):對文件進行"寫"操作和"附加"操作的權力。
4.Delete(刪除):對文件進行刪除(上傳、更名、刪除、移動)操作的權力。
5.Execute(執行):直接運行可執行文件的權力。
6.List(列表):對文件和目錄的查看權力。
7.Create(建立):建立目錄的權力。
8.Remove(移動):對目錄進行移動、刪除和更名的權力。
9.Inherit(繼承):如勾選中此項則以上設置的屬性將對當前Path(目錄)及其下的整個目錄樹起作用;否則就只對其當前Path(目錄)有效。
-------
4.增加虛擬目錄
比如匿名用戶(Anonymous)的主目錄為D:\wy,想要能通過ftp://192.168.0.1/test的格式能訪問到在E:\all\nodisk中的內容,則需要為它添加虛擬目錄。操作步驟如下:
(1)在管理器左邊框架中,選擇Domains(域名)下的Settings(設置),再在右邊框架中轉到General(常用)窗口。
(2)單擊Virtual path mappings(虛擬目錄映射)下的Add(增加)按鈕,之後根據提示在Physical path(物理路徑)下選擇E:\all\nodisk;在Map Physical path to(映射物理路徑到)下選擇D:\wy;在mapped path name(映射路徑名)處輸入test即可添加好此虛擬目錄的映射記錄。(如圖5)
(3)最後在管理器的左邊框架中選中Anonymous用戶,再在右邊框架中轉到Dir Access(目錄存取)窗口,按Add(添加)按鈕將E:\all\nodisk目錄增加到列表中去。
五、常見問題
Q:我在Serv-U中建立好自己的FTP伺服器之後,用匿名登錄上去,發覺所處位置不是自己原設置的主目錄;我在Serv-U中新建立的賬戶則根本不能登錄。為什麼?
A:出現這種問題,極可能是因為在安裝Serv-U之前,你的計算機上還運行著其他FTP服務!最常見的是啟動了IIS中的FTP服務,由於它已先行佔用了21埠,因此後面裝的Serv-U就不能正常運行了。
解決方法是到"開始→程序→管理工具→Intenret信息服務"中將裡面所有的FTP站點都逐個去單擊右鍵,選"停止";最後再在Serv-U的管理器中,選中左邊窗口中的Local Server(本機伺服器),再單擊右邊框架中的Stop Server(停止服務)按鈕,然後重新單擊Start Server(開啟服務)按鈕即可。
Q:我想暫停Serv-U的FTP服務,但當我退出管理器後,卻發覺它的服務仍然在生效。這是為什麼呢?
A:因為Serv-U的管理器和FTP服務兩部分是相對分離的,關閉一部分,並不對另一部分產生影響。欲暫停FTP服務,需得在管理器中選中Local Server(本機伺服器),再按Stop Server(停止服務)按鈕。
Q:我的計算機是撥號上網,如何利用Serv-U建立一個互聯網上的FTP伺服器?
A:撥號上網每次所獲得的IP地址均不同,因此,當按本文前面所述的方法安裝和配置好你的Serv-U伺服器之後,每次重新撥號成功之後,你都需要用winipcfg(用於Win9x下)或ipconfig /all(用於Windown NT/2000下)查看到當前的最新IP地址後,再將它告訴要訪問你伺服器的人即可。其他地方不需要再做任何修改。
Q:我在單位內部網上建立了一個Serv-U伺服器,但是它只能用IP地址或計算機名進行訪問,如何使它同時可用如ftp://ftp.popunet.com形式的域名進行訪問呢?
A:這需要在你的Windows 2000中建立IP地址和域名相對應的DNS記錄。
⑹ VB與FTP編程
建議樓主用winsock連接FTP伺服器,發送FTP命令來實現交互,另外說明下,目錄的獲取與文件的傳輸是另開埠進行的,以下是命令表
ftp協議命令字(轉)
命令 描述
ABOR 中斷數據連接程序
ACCT <account> 系統特權帳號
ALLO <bytes> 為伺服器上的文件存儲器分配位元組
APPE <filename> 添加文件到伺服器同名文件
CDUP <dir path> 改變伺服器上的父目錄
CWD <dir path> 改變伺服器上的工作目錄
DELE <filename> 刪除伺服器上的指定文件
HELP <command> 返回指定命令信息
LIST <name> 如果是文件名列出文件信息,如果是目錄則列出文件列表
MODE <mode> 傳輸模式(S=流模式,B=塊模式,C=壓縮模式)
MKD <directory> 在伺服器上建立指定目錄
NLST <directory> 列出指定目錄內容
NOOP 無動作,除了來自伺服器上的承認
PASS <password> 系統登錄密碼
PASV 請求伺服器等待數據連接
PORT <address> IP 地址和兩位元組的埠 ID
PWD 顯示當前工作目錄
QUIT 從 FTP 伺服器上退出登錄
REIN 重新初始化登錄狀態連接
REST <offset> 由特定偏移量重啟文件傳遞
RETR <filename> 從伺服器上找回(復制)文件
RMD <directory> 在伺服器上刪除指定目錄
RNFR <old path> 對舊路徑重命名
RNTO <new path> 對新路徑重命名
SITE <params> 由伺服器提供的站點特殊參數
SMNT <pathname> 掛載指定文件結構
STAT <directory> 在當前程序或目錄上返回信息
STOR <filename> 儲存(復制)文件到伺服器上
STOU <filename> 儲存文件到伺服器名稱上
STRU <type> 數據結構(F=文件,R=記錄,P=頁面)
SYST 返回伺服器使用的操作系統
TYPE <data type> 數據類型(A=ASCII,E=EBCDIC,I=binary)
USER <username>> 系統登錄的用戶名
標准 FTP 信息如下:
響應代碼 解釋說明
110 新文件指示器上的重啟標記
120 伺服器准備就緒的時間(分鍾數)
125 打開數據連接,開始傳輸
150 打開連接
200 成功
202 命令沒有執行
211 系統狀態回復
212 目錄狀態回復
213 文件狀態回復
214 幫助信息回復
215 系統類型回復
220 服務就緒
221 退出網路
225 打開數據連接
226 結束數據連接
227 進入被動模式(IP 地址、ID 埠)
230 登錄網際網路
250 文件行為完成
257 路徑名建立
331 要求密碼
332 要求帳號
350 文件行為暫停
421 服務關閉
425 無法打開數據連接
426 結束連接
450 文件不可用
451 遇到本地錯誤
452 磁碟空間不足
500 無效命令
501 錯誤參數
502 命令沒有執行
503 錯誤指令序列
504 無效命令參數
530 未登錄網路
532 存儲文件需要帳號
550 文件不可用
551 不知道的頁類型
552 超過存儲分配
553 文件名不允許
⑺ 建一個FTP伺服器需要什麼
建立FTP伺服器需要單獨伺服器,專業的軟體,如果只是臨時使用自己的機器共享些文件,可以使用FTP簡易版,軟體比較小,啟動速度快,暫用系統資源少等特點。
1、首先打開,FTP簡易版軟體。
⑻ 微信公眾平台上傳視頻失敗ret:200003
這個可能是由於在微信公眾平台上傳視頻數量較多,審核人員不足造成的,耐心等待或者選擇蔽簡其他平台上傳視頻即兆譽可。 微信平台上傳視頻的方法如族並段下:首先登陸點擊上傳登陸騰訊上傳後台。點擊上傳,上傳審核需要一段時間。上傳成功後打開這個視頻。復制要上傳的視頻地址。同時我們進入微信公眾平台打開1素材,2單圖文消息或多圖文消息。3點擊藍色按鈕。即可完成。