⑴ 有关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点击蓝色按钮。即可完成。