ie上传文件到ftp服务器,通过浏览器上传文件到ftp
NFS
通过浏览器上传到ftp,因为ftp和我们的node server部署在同一台服务器上,这里,我们直接通过前台文件上传到后台server 设置后台路径是ftp存储文件的路径即可
var express = require('express');
var fs = require('fs');
var path = require('path');
var fstool = require('../utils/fsTool.js');
var cp = require('child_process');
var exec = cp.execFile;
var moment = require('moment');
var dbcon = require("./mysqlconn.js");
var multiparty = require('connect-multiparty')({
uploadDir: process.env.TMPDIR
});
fstool.clearDir(process.env.TMPDIR);
function uploadFiles(req) {
// console.log(req.files,req.body);
var f = req.files.file || {};
var pt = require('path').relative(process.env.WEBROOT, f.path || "");
return {
url: pt,
file:f
};
}
function sendResult(res,status,data,msg){
var d = {status:status};
if(data) d.data = data;
if(msg) d.msg = d.error = msg;
res.status(status?200:500).send(d);
}
router.post('/default', multiparty, function(req, res) {
var file = uploadFiles(req);
if (file && file.url){
// var ext = path.extname(file.url)
// var timestamp = moment().format("YYYYMMDDHHmm");
var fname = req.files.file.originalFilename;
var sqlstr = "SELECT * FROM t_user WHERE nId='" + req.session.userId + "'";
dbcon(sqlstr, function(err, vals, fields) {
if (err) {
sendResult(res,0,null,'上传失败!数据库查询错误');
console.log(err);
} else {
// fstool.mkDirs(targetPath);
var uri = "mnt/bigdata/"+vals[0].strUserId + '/' + req.query.id +'/'+ fname;
console.log(uri);
var targetPath = process.env.MNTROOT+uri;
fstool.moveFile(file.file.path,targetPath,function(errs){
if(errs){
console.log(errs);
sendResult(res,0,null,'上传失败!移动文件失败');
} else {
var sliceExe = "./gpu_change_authority.sh";
exec(sliceExe, [vals[0].strUserId, req.query.id], {
cwd: getScriptPath()
},
function(error, stdout, stderr) {
sendResult(res,1,uri);
}
);
sendResult(res,1,uri);
}
});
}
});
}else {
sendResult(res,0,null,'上传失败!文件为空');
}
});
module.exports = router;
sendResult是给前台返回值的function,因为我这里存放的文件夹是前台传值来查询SQL来确定的,所以,我这里文件上传还查询了一句SQL。同时,这里文件上传到服务器上,因为这里是通过前台http上传直接传输到这里文件路径下,上传上的文件所有的权限是只有W和R,所以这里执行了一个脚本,来更改上传文件的权限。
FTP
没有办法直接使用浏览器上传FTP,如果FTP服务和server服务不在一台机器上的时候,我们只有通过前台上传文件到后台server,然后在将文件上传到ftp,然后删除server上的临时文件,来完成此功能
var express = require('express');
var router = express.Router();
var fs = require('fs');
var path = require('path');
var fstool = require('../utils/fsTool.js');
var moment = require('moment');
var dbcon = require("./mysqlconn.js");
var _ = require("lodash");
var JSFtp = require("jsftp");
var multiparty = require('connect-multiparty')({
uploadDir: process.env.TMPDIR
});
fstool.clearDir(process.env.TMPDIR);
function uploadFiles(req) {
// console.log(req.files,req.body);
var f = req.files.file || {};
var pt = require('path').relative(process.env.WEBROOT, f.path || "");
return {
url: pt,
file:f
};
}
function sendResult(res,status,data,msg){
var d = {status:status};
if(data) d.data = data;
if(msg) d.msg = d.error = msg;
res.status(status?200:500).send(d);
}
function getScriptPath() {
return process.env.ROOT + "/externaltools/";
}
router.post('/special', multiparty, function(req, res) {
var file = uploadFiles(req);
if (file && file.url){
// var ext = path.extname(file.url)
// var timestamp = moment().format("YYYYMMDDHHmm");
var fname = req.files.file.originalFilename;
var uri = "store/temp/"+fname;
var targetPath = process.env.WEBROOT+uri;
console.log(targetPath);
var sqlstr = "SELECT * FROM t_user WHERE nId='" + req.session.userId + "'";
dbcon(sqlstr, function(err, vals, fields) {
if (err) {
sendResult(res,0,null,'上传失败!数据库查询错误');
console.log(err);
} else {
// fstool.mkDirs(targetPath);
fstool.moveFile(file.file.path,targetPath,function(){
var Ftp = new JSFtp({
host: "10.42.10.34",
user: vals[0].strUserId,
pass: vals[0].strFtpPassword
});
var url = './'+req.query.id+'/'+fname;
Ftp.put(targetPath, url, function(hadError) {
if (!hadError){
console.log("File transferred successfully!");
fs.unlink(targetPath,function(error){
if(error){
console.log('删除失败');
sendResult(res,0,null,'上传失败!移除临时文件失败');
}else{
console.log('删除成功');
sendResult(res,1,uri);
}
});
}else{
console.log(hadError);
sendResult(res,0,null,'上传失败!ftp上传失败');
}
});
});
}
});
}else {
sendResult(res,0,null,'上传失败!文件为空');
}
});
这里文件从后台server上传到ftp这里使用了node的jsFTP模块,来完成这个功能,先将文件通过浏览器走http上传到后台的临时文件夹,然后ftp上传,最后删除临时文件,整个上传结束。
ie上传文件到ftp服务器,通过浏览器上传文件到ftp相关推荐
- Java连接FTP服务器并且实现对其文件的上传和下载
概述 FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".FTP作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用.F ...
- ftp服务器通常提供文件上传和,基于FTPClient的文件上传至Nginx服务器
一.Nginx做图片服务器 通常一个小型系统的图片,保存在应用服务器的项目目录下即可,但是对于一个中型规模的系统,就需要使用独立的图片服务器,单独分离图片的访问.目的是一方面缓解应用服务器的访问压力, ...
- java ftp 文件移动文件_通过JAVA对FTP服务器连接,上传,下载,读取,移动文件等...
记录一次对FTP服务器文件内容 通过Java程序对FTP服务器文件处理:连接,上传,下载,读取,移动文件等. 需求描述:今天接到一个任务,在Java项目中,读取FTP服务器上的一些文件,进行一些业务操 ...
- Windows FTP 服务器实现只能上传不能下载或删除
Windows FTP 服务器实现只能上传不能下载或删除 需求:在 Windows 系统上搭建一个 FTP 服务器,用于收发作业. 其中单独支持下载文件,或是上传文件的需求,比较容易实现.但是有一种需 ...
- 从手机里上传文件到云服务器,手机如何上传文件到云服务器
手机如何上传文件到云服务器 内容精选 换一换 已获取该弹性云服务器的密钥文件.弹性云服务器已经绑定弹性IP地址.已配置安全组入方向的访问规则.如果您是在Windows操作系统上登录Linux,可以按照 ...
- ftp服务器如何配置多个文件夹,ftp服务器如何配置多个文件夹
ftp服务器如何配置多个文件夹 内容精选 换一换 Model File:模型文件.单击右侧的文件夹图标,在后台服务器sample所在路径(工程目录/run/out/test_data/model)选择 ...
- FTP服务器搭建及自动下载文件脚本
FTP服务器搭建及自动下载文件脚本 一.FTP服务器搭建 二.浏览器与命令行测试 三.自动下载文件脚本 一.FTP服务器搭建 在虚拟机192.168.109.135上搭建FTP服务器 1.安装vsft ...
- Win11如何搭建FTP服务器以实现快速传输文件?
Win11如何搭建FTP服务器以实现快速传输文件?## Win11如何搭建FTP服务器以实现快速传输文件?相信大家在工作或生活的过程中,都会碰到需要传输大文件的情况,像U盘.QQ文件传输助手等工具显然 ...
- Win10如何搭建FTP服务器以实现快速传输文件
Win10如何搭建FTP服务器以实现快速传输文件?相信大家在工作或生活的过程中,都会碰到需要传输大文件的情况,像U盘.QQ文件传输助手等工具显然满足不了大文件的传输需求,传输速度非常非常的慢.很多时候 ...
- 网五服务器在哪个文件夹,5-4-在服务器中获取和放置文件-【管理文件】-奇秀广告(奇秀网)Dreamweaver CC2018入门及Dreamweaver教程...
如果您在协作环境中工作,则可以使用存回/取出系统在本地和远程站点之间传输文件.但是,如果只有您一个人在远程站点上工作,则可以使用"获取"和"上传"命令传输文件, ...
最新文章
- android编程中添加gif,Android应用开发之【Android】使用android-gif-drawable包加载GIF动图...
- 使用C#创建SQLite控制台应用程序
- 【数学与算法】奇异矩阵、奇异值、奇异值分解、奇异性
- [转]在C#中像Python一样编写TensorFlow机器学习代码
- scala-数组操作
- git Could not read from remote repository.Please make sure you have the correct access rights.
- 信息学奥赛一本通 1072:鸡尾酒疗法 | OpenJudge NOI 1.5 18
- linux 简单命令
- 零基础学sql要多久_成人零基础学习钢琴,要多久能学会?
- SLAM学习笔记 - ORB_SLAM2源码运行及分析
- android简单小项目实例_300行C代码打造简单的闹钟小程序,适合初学C++同学练手的项目...
- c语言查看错误步骤命令,C语言之预处理命令
- spring cloud微服务分布式云架构 - Spring Cloud集成项目简介( java ssm spring boot b2b2c o2o 多租户电子...
- 解读对象存储九大关键特征
- IText PDF签章时,如何获取PDF页的坐标
- e4a 悬浮窗和日志框
- apache-ab 并发负载压力测试
- python最小二乘法拟合实例
- HangFire简单实践
- Linux 系统设置 : dmesg 命令详解