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相关推荐

  1. Java连接FTP服务器并且实现对其文件的上传和下载

    概述 FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".FTP作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用.F ...

  2. ftp服务器通常提供文件上传和,基于FTPClient的文件上传至Nginx服务器

    一.Nginx做图片服务器 通常一个小型系统的图片,保存在应用服务器的项目目录下即可,但是对于一个中型规模的系统,就需要使用独立的图片服务器,单独分离图片的访问.目的是一方面缓解应用服务器的访问压力, ...

  3. java ftp 文件移动文件_通过JAVA对FTP服务器连接,上传,下载,读取,移动文件等...

    记录一次对FTP服务器文件内容 通过Java程序对FTP服务器文件处理:连接,上传,下载,读取,移动文件等. 需求描述:今天接到一个任务,在Java项目中,读取FTP服务器上的一些文件,进行一些业务操 ...

  4. Windows FTP 服务器实现只能上传不能下载或删除

    Windows FTP 服务器实现只能上传不能下载或删除 需求:在 Windows 系统上搭建一个 FTP 服务器,用于收发作业. 其中单独支持下载文件,或是上传文件的需求,比较容易实现.但是有一种需 ...

  5. 从手机里上传文件到云服务器,手机如何上传文件到云服务器

    手机如何上传文件到云服务器 内容精选 换一换 已获取该弹性云服务器的密钥文件.弹性云服务器已经绑定弹性IP地址.已配置安全组入方向的访问规则.如果您是在Windows操作系统上登录Linux,可以按照 ...

  6. ftp服务器如何配置多个文件夹,ftp服务器如何配置多个文件夹

    ftp服务器如何配置多个文件夹 内容精选 换一换 Model File:模型文件.单击右侧的文件夹图标,在后台服务器sample所在路径(工程目录/run/out/test_data/model)选择 ...

  7. FTP服务器搭建及自动下载文件脚本

    FTP服务器搭建及自动下载文件脚本 一.FTP服务器搭建 二.浏览器与命令行测试 三.自动下载文件脚本 一.FTP服务器搭建 在虚拟机192.168.109.135上搭建FTP服务器 1.安装vsft ...

  8. Win11如何搭建FTP服务器以实现快速传输文件?

    Win11如何搭建FTP服务器以实现快速传输文件?## Win11如何搭建FTP服务器以实现快速传输文件?相信大家在工作或生活的过程中,都会碰到需要传输大文件的情况,像U盘.QQ文件传输助手等工具显然 ...

  9. Win10如何搭建FTP服务器以实现快速传输文件

    Win10如何搭建FTP服务器以实现快速传输文件?相信大家在工作或生活的过程中,都会碰到需要传输大文件的情况,像U盘.QQ文件传输助手等工具显然满足不了大文件的传输需求,传输速度非常非常的慢.很多时候 ...

  10. 网五服务器在哪个文件夹,5-4-在服务器中获取和放置文件-【管理文件】-奇秀广告(奇秀网)Dreamweaver CC2018入门及Dreamweaver教程...

    如果您在协作环境中工作,则可以使用存回/取出系统在本地和远程站点之间传输文件.但是,如果只有您一个人在远程站点上工作,则可以使用"获取"和"上传"命令传输文件, ...

最新文章

  1. android编程中添加gif,Android应用开发之【Android】使用android-gif-drawable包加载GIF动图...
  2. 使用C#创建SQLite控制台应用程序
  3. 【数学与算法】奇异矩阵、奇异值、奇异值分解、奇异性
  4. [转]在C#中像Python一样编写TensorFlow机器学习代码
  5. scala-数组操作
  6. git Could not read from remote repository.Please make sure you have the correct access rights.
  7. 信息学奥赛一本通 1072:鸡尾酒疗法 | OpenJudge NOI 1.5 18
  8. linux 简单命令
  9. 零基础学sql要多久_成人零基础学习钢琴,要多久能学会?
  10. SLAM学习笔记 - ORB_SLAM2源码运行及分析
  11. android简单小项目实例_300行C代码打造简单的闹钟小程序,适合初学C++同学练手的项目...
  12. c语言查看错误步骤命令,C语言之预处理命令
  13. spring cloud微服务分布式云架构 - Spring Cloud集成项目简介( java ssm spring boot b2b2c o2o 多租户电子...
  14. 解读对象存储九大关键特征
  15. IText PDF签章时,如何获取PDF页的坐标
  16. e4a 悬浮窗和日志框
  17. apache-ab 并发负载压力测试
  18. python最小二乘法拟合实例
  19. HangFire简单实践
  20. Linux 系统设置 : dmesg 命令详解

热门文章

  1. 4.1日预测及操作建议
  2. python爬虫之数据提取、正则表达式、xml、XPath、etree、CSS选择器 BeautifulSoup4
  3. 影响力最大化 RIS 反向影响力采样算法
  4. 世界杯爆冷的球队的最新相关信息
  5. 我在知乎上关于Laser200/310电脑的文章。
  6. Ubuntu安装使用(一)
  7. [日推荐]『识花草』做个辛勤的小园丁
  8. java编写程序防止电脑屏幕休眠
  9. UML类图中实线虚线的指向关系
  10. 怎么给视频去水印?手把手教你去水印