标签: FTP

批处理ftp上传文件到linux服务器上

该脚本可以把本地指定目录下的文件,通过ftp上传到linux服务器的指定位置。

@echo off
::创建本地目录
mkdir D:\upload\filea
mkdir D:\upload\fileb
set file=114.ftp
::创建114.ftp,并写入连接ftp的信息
echo open 192.168.1.114 > C:\%file%
echo user libin >> C:\%file%
echo libin>> C:\%file%
echo lcd D:\upload\filea>> C:\%file%
echo cd /home/libin/upload/filea>> C:\%file%
echo bin>> C:\%file%
echo prompt>> C:\%file%
echo mput *>> C:\%file%
echo lcd D:\upload\fileb>> C:\%file%
echo cd /home/libin/upload/fileb>> C:\%file%
echo bin>> C:\%file%
echo mput *.zip>> C:\%file%
echo bye>> C:\%file%
echo quit>> C:\%file%
echo exit>> C:\%file%
::先把待上传的文件放到本地指定目录下
echo ————————————–
echo 请把要上传的文件放到指定目录:
echo filea放到D:\upload\filea
echo fileb升级包放到D:\upload\fileb
echo ————————————–
pause
if not exist “D:\upload\filea\” echo filea未放到指定目录
if exist “D:\upload\filea\*” (
echo filea已放到指定目录
echo 正在上传filea
C:
ftp -n -s:C:\114.ftp>nul
echo filea上传成功
echo 清理本地文件filea
del D:\upload\filea\*
)
echo ————————————–
pause
if not exist “D:\upload\fileb\*.zip” echo fileb未放到指定目录
if exist “D:\upload\fileb\*.zip” (
echo fileb已放到指定目录
echo 正在上传fileb
C:
ftp -n -s:C:\114.ftp>nul
echo fileb上传成功
echo 清理本地fileb
del D:\upload\fileb\*
)
echo ————————————–
pause

简单了解ftp协议和http协议

(一)常见协议及端口

(1). HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080
(2). SOCKS代理协议服务器常用端口号:1080
(3). FTP(文件传输)协议代理服务器常用端口号:21
(4). Telnet(远程登录)协议代理服务器常用端口:23

(二)FTP协议
FTP端口号是 21
FTP的端口号能改
ftp的端口号20、21的区别一个是数据端口,一个是控制端口,控制端口一般为21,而数据端口不一定是20,这和FTP的应用模式有关,如果是主动模式,应该为20,如果为被动模式,由服务器端和客户端协商而定.
21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务,FTP服务主要是为了在两台计算机之间实现文件的上传与下载,一台计算机作为FTP客户端,另一台计算机作为FTP服务器,可以采用匿名(anonymous)登录和授权用户名与密码登录两种方式登录FTP服务器。
一个主动模式的FTP连接建立要遵循以下步骤:
客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,源端口为随机端口x,在客户端,远程端口为21,在服务器。
客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。
服务器打开20号源端口并且建立和客户端数据端口的连接。此时,源端口为20,远程数据端口为(x+1)。
客户端通过本地的数据端口建立一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经建立好了一个连接。
(三)http协议

特点:

HTTP协议永远都是客户端发起请求,服务器回送响应。这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

HTTP协议的主要特点可概括如下:
1、支持客户/服务器模式。支持基本认证和安全认证。
2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4、HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

springboot以FTP方式上传文件到远程服务器

此处远程服务器是ubuntu,关于ftpserver的配置请参考该文https://blog.csdn.net/sunxiaoju/article/details/85224602,在此处就不再赘述。该篇文章主要针对如何实现代码来进行代码干货的分享。

本小编用的前台为layui框架。话不多说直接上干货,代码没什么好解释的,直接贴出前后台代码以供大家分享使用。

一、html代码

<div class=”layui-form-item”>
<label class=”layui-form-label”>上传附件:</label>
<div class=”layui-input-block doc-litpic”>
<button type=”button” name=”avatar” class=”layui-btn layui-btn-sm” data-url=”/admin/archives/upload.html” id=”larry-litpic”><i class=”layui-icon”></i>本地上传</button>
<a id=”upload-filename-display” style=”color: blue” href=””></a>
<div class=”larryms-img-view”>
</div>
</div>
</div>
二、js代码

upload.render({
accept: ‘file’,
elem: ‘#larry-litpic’,
url: interface_cms_article_upload,
field: ‘fileNames’,
done : function (res, index, upload) {
if(res.code != 200){
layer.open({
icon : 2,
skin : “layui-layer-molv”,
content : res.msg
});
}else{
layer.open({
icon : 1,
skin : “layui-layer-molv”,
content : res.msg
});
$(‘#upload-filename-display’).text(res.filename);
$(“input[name=’fileId’]”).val(res.filename);
}
},
error : function (res) {

}
});
三、后台controller:

@RequestMapping(value = “/upload”)
@ApiOperation(value = “本地文件上传”,notes =”本地文件上传” )
public Map uploadfunction(HttpServletRequest request, HttpServletResponse response){
//创建文件对象并获取请求中的文件对象
MultipartFile file = null;
Map resultData = new HashMap();

try{
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
file = mRequest.getFile(“fileNames”);

//判断上传非空
if(null == file) {
resultData.put(“code”,0);
resultData.put(“msg”,”上传文件失败”);
resultData.put(“filename”,file.getOriginalFilename());
return resultData;
}
//上传需要导入数据的文件
//用来检测程序运行时间
long startTime=System.currentTimeMillis();
System.out.println(“上传的文件名为:”+file.getOriginalFilename());
String fileName = file.getOriginalFilename();

InputStream inputStream = file.getInputStream();

String hostName = uploadUtil.getHostname();
String username = uploadUtil.getUsername();
String password = uploadUtil.getPassword();
String targetPath = uploadUtil.getTargetPath();
String suffix = cmsArticleService.getSuffix(fileName);
fileName = cmsArticleService.upload(hostName,username,password,targetPath,suffix,inputStream);
//计算上传时间
long endTime=System.currentTimeMillis();
String uploadTime = String.valueOf(endTime-startTime);
System.out.println(“上传所用时间:”+uploadTime+”ms”);

resultData.put(“code”,200);
resultData.put(“msg”,”上传文件成功”);
resultData.put(“filename”,fileName);
return resultData;

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
四、后台service上传至远程服务器

//FTP文件上传
public static String upload(String hostname,String username,String password,
String targetPath,String suffix,InputStream inputStream) throws SocketException, IOException {
//实例化ftpClient
FTPClient ftpClient = new FTPClient();
//设置登陆超时时间,默认是20s
ftpClient.setDataTimeout(12000);
//1.连接服务器
ftpClient.connect(hostname,21);
//2.登录(指定用户名和密码)
boolean b = ftpClient.login(username,password);
if(!b) {
System.out.println(“登陸超時”);
if (ftpClient.isConnected()) {
// 断开连接
ftpClient.disconnect();
}
}
// 设置字符编码
ftpClient.setControlEncoding(“UTF-8″);
//基本路径,一定存在
String basePath=”/”;
String[] pathArray = targetPath.split(“/”);
for(String path:pathArray){
basePath+=path+”/”;
//3.指定目录 返回布尔类型 true表示该目录存在
boolean dirExsists = ftpClient.changeWorkingDirectory(basePath);
//4.如果指定的目录不存在,则创建目录
if(!dirExsists){
//此方式,每次,只能创建一级目录
boolean flag=ftpClient.makeDirectory(basePath);
if (flag){
System.out.println(“创建成功!”);
}
}
}
//重新指定上传文件的路径
ftpClient.changeWorkingDirectory(targetPath);
//5.设置上传文件的方式
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
//使用uuid,保存文件名唯一性
String uuid= UUID.randomUUID().toString();
/**
* 6.执行上传
* remote 上传服务后,文件的名称
* local 文件输入流
* 上传文件时,如果已经存在同名文件,会被覆盖
*/
boolean uploadFlag = ftpClient.storeFile(uuid+suffix,inputStream);
if(uploadFlag)
System.out.println(“上传成功!”);
return uuid+suffix;
}
五、获取yml配置的工具类

@Data
@Component
public class UploadUtil {
@Value(“${upload.hostname}”)
private String hostname;
@Value(“${upload.username}”)
private String username;
@Value(“${upload.password}”)
private String password;
@Value(“${upload.targetPath}”)
private String targetPath;
}

java实现 FTP实现上传、下载

上传

/**
* FTP上传单个文件测试
*/
public static void uploadFtpFile(String hostname,String username,
String password,String uploadFilePath,String fileName,String ftpWorkPath)
throws RuntimeException{
FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;

try {
ftpClient.connect(hostname);
ftpClient.login(username, password);

File srcFile = new File(uploadFilePath+fileName);
fis = new FileInputStream(srcFile);
//设置上传目录
ftpClient.changeWorkingDirectory(“/”+ftpWorkPath);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding(“GBK”);

//设置为被动模式
ftpClient.enterLocalPassiveMode();

//设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile(fileName, fis);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(“FTP客户端出错!”, e);
} finally {
IOUtils.closeQuietly(fis);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(“关闭FTP连接发生异常!”, e);
}
logger.info(“已上传至FTP服务器路径!”);
}
}
下载

/**
* 获取FTPClient对象
*
* @param ftpHost
* FTP主机服务器
* @param ftpPassword
* FTP 登录密码
* @param ftpUserName
* FTP登录用户名
* @param ftpPort
* FTP端口 默认为21
* @return
*/
public static FTPClient getFTPClient(String ftpHost, String ftpUserName,
String ftpPassword, int ftpPort) throws RuntimeException{
FTPClient ftpClient = new FTPClient();
try {
ftpClient = new FTPClient();
ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
logger.info(“未连接到FTP,用户名或密码错误。”);
ftpClient.disconnect();
} else {
logger.info(“FTP连接成功。”);
}
} catch (SocketException e) {
e.printStackTrace();
logger.info(“FTP的IP地址可能错误,请正确配置。”);
throw new RuntimeException(“FTP的IP地址可能错误,请正确配置!”, e);
} catch (IOException e) {
e.printStackTrace();
logger.info(“FTP的端口错误,请正确配置。”);
throw new RuntimeException(“FTP的端口错误,请正确配置!”, e);
}
return ftpClient;
}

/**
* 从FTP服务器下载文件
* @param ftpHost FTP IP地址
* @param ftpUserName FTP 用户名
* @param ftpPassword FTP用户名密码
* @param ftpPort FTP端口
* @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa
* @param localPath 下载到本地的位置 格式:H:/download
* @param fileName 文件名称
*/
public static boolean downloadFtpFile(String ftpHost, String ftpUserName,
String ftpPassword, int ftpPort, String ftpPath, String localPath,
String fileName) throws RuntimeException{
boolean flag = false;
FTPClient ftpClient = null;

try {
ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
ftpClient.setControlEncoding(“UTF-8”); // 中文支持
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
ftpClient.changeWorkingDirectory(ftpPath);

File localFile = new File(localPath + File.separatorChar + fileName);
OutputStream os = new FileOutputStream(localFile);
ftpClient.retrieveFile(fileName, os);
os.close();
ftpClient.logout();
flag = true;
} catch (FileNotFoundException e) {
logger.error(“没有找到” + ftpPath + “文件”);
e.printStackTrace();
throw new RuntimeException(“没有找到” + ftpPath + “文件:”, e);
} catch (SocketException e) {
logger.error(“连接FTP失败.”);
e.printStackTrace();
throw new RuntimeException(“连接FTP失败:”, e);
} catch (IOException e) {
e.printStackTrace();
logger.error(“文件读取错误。”);
e.printStackTrace();
throw new RuntimeException(“文件读取错误:”, e);
}
return flag;
}
测试代码

public static void main(String[] args) {
//下载
// FavFTPUtil.downloadFtpFile(“192.168.2.133″,”adks”,”adconcepts2017″,
// “fileConllect/test”,”E:\\xcc”, “53840afe-0682-4960-84ef-3f3b972a0f12.zip”);

FavFTPUtil.uploadFtpFile(“192.168.2.133″,”test”,”123″,
“E:\\360\\pic\\”, “a.txt”,
“fengWu/”);

}

如何让 FTP 支持播放视频文件?

*近购买了 Gear VR ,因为手机容量比较小,所以想通过 FTP 访问 PC 的媒体文件来播放。 下载安装了 Serv-U 试用版,尝试搭建了本机 FTP 服务器,在手机上通过 IP 可以正常访问,但是尝试播放其中的 MP4 文件却无法播放(点击进入播放后显示为无时长),图片可以正常打开。 所以,求助如何设置才可以播放?

第 1 条附言 · 2016-10-15 19:39:43 +08:00
谢谢各位朋友的回复。
目前使用了 Ngnix , everything , serv-u , hfs 等软件搭建的 HTTP/FTP 服务器,在手机浏览器上都无法正常播放视频,可能是无法调用播放器的原因。 ES 文件管理器+MX Player 的组合,因为无法在 Gear VR 中使用,所以也就作罢了。
之后找到一个软件:某镜 VR (为避免广告嫌疑,就不讲明软件名称了),内置的局域网功能可以播放 PC 上共享的文件,缺点是:需要开启网络共享。另外,播放的体验上也不好,缓冲的速度仅 1500-2000KB/s ,对 VR 视频来说,不太好,看几秒就缓冲,不过这应该是我的渣路由器的问题。
谢谢啦。

• 2016-12-10 09:18:10 +08:00
flyz 1
flyz 2016-10-15 13:28:03 +08:00 via Android
为什么不搭建 http 呢
pmpio 2
pmpio 2016-10-15 13:34:07 +08:00
一个几百 Kb 的 hfs.exe 就能搞定的事,你却搞这么复杂。。。。
sutra 3
sutra 2016-10-15 13:39:53 +08:00
换个播放客户端就可以了吧,我测试了在 macOS 上 mpv 似乎是可以播放 ftp 上的 mp4 的。
chanssl 4
chanssl 2016-10-15 14:25:05 +08:00
@pmpio HFS 试过啊,不行的。不能直接播放
v1024 5
v1024 2016-10-15 14:57:24 +08:00 via iPhone
似乎需要,被动模式?
magickzl 6
magickzl 2016-10-15 15:13:02 +08:00
手机 ES+mx player 不就解决了吗

自己的 NAS 就是这么看的啊。
ewex 7
ewex 2016-10-15 15:17:27 +08:00
Everything 自带搜索功能,可开 HTTP 和 FTP ,经常这样用。
loading 8
loading 2016-10-15 16:17:32 +08:00 via Android
@ewex 我也是用 everything ?
kkk330 9
kkk330 2016-10-15 16:56:44 +08:00
换 samba?
heiyutian 10
heiyutian 2016-10-15 17:26:14 +08:00 via iPhone
@ewex
@loading
安卓上这个软件怎么开 ftp ,没找到添加按钮呢

loading 2016-10-15 17:49:25 +08:00 via Android
@heiyutian 那是 windows 的软件……手机开浏览器
chanssl 12
chanssl 2016-10-15 17:50:07 +08:00
@magickzl Gear VR 不支持打开常规软件的。
chanssl 13
chanssl 2016-10-15 17:57:25 +08:00
@ewex @loading 试了 Everything ,也是一样的状况,纠结。
loading 14
loading 2016-10-15 18:00:07 +08:00 via Android
试一下 nginx + h5ai
lean 15
lean 2016-10-15 18:40:08 +08:00 via Android
samba+es
chanssl 16
chanssl 2016-10-15 19:39:51 +08:00
谢谢各位朋友的回复。
目前使用了 Ngnix , everything , serv-u , hfs 等软件搭建的 HTTP/FTP 服务器,在手机浏览器上都无法正常播放视频,可能是无法调用播放器的原因。 ES 文件管理器+MX Player 的组合,因为无法在 Gear VR 中使用,所以也就作罢了。
之后找到一个软件:某镜 VR (为避免广告嫌疑,就不讲明软件名称了),内置的局域网功能可以播放 PC 上共享的文件,缺点是:需要开启网络共享。另外,播放的体验上也不好,缓冲的速度仅 1500-2000KB/s ,对 VR 视频来说,不太好,看几秒就缓冲,不过这应该是我的渣路由器的问题。
谢谢啦。
miaomiao2015 17
miaomiao2015 2016-11-07 19:13:19 +08:00
手机是 iOS 还是啥? iOS 可以试试 Air Video ,电脑装 server 端,局域网内连就可以了。
chanssl 18
chanssl 2016-11-07 19:20:20 +08:00
@miaomiao2015 Android 。已经解决了。
kojirou 19
kojirou 2016-11-08 13:43:54 +08:00
vidon
Hardrain 20
Hardrain 2016-12-03 18:56:44 +08:00
HTTP Server+MX Player 网络流媒体

IIS7.5 、 Apache(XAMPP) on Win7 x64
Apache 2.4.18 on Ubuntu 16.04 x64 都可用
Nginx 没试过
chanssl 21
chanssl 2016-12-08 01:57:04 +08:00 via Android
@Hardrain
@kojirou 谢谢,但是我的需求场景是 VR , VR 场景下无法使用普通应用。
Hardrain 22
Hardrain 2016-12-10 09:18:10 +08:00
@chanssl 那就当做个参考吧……

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速