Javascript 如何确定节点中的文件大小?
我有一个应用程序来推断用户上传的文件的大小。我有如下代码Javascript 如何确定节点中的文件大小?,javascript,jquery,node.js,Javascript,Jquery,Node.js,我有一个应用程序来推断用户上传的文件的大小。我有如下代码 var express = require('express'); var formidable = require('express-formidable'); var fs = require('fs'); var app = express(); var PORT = 8080; app.use(express.static(__dirname+'/views')); app.use(formidable.parse());
var express = require('express');
var formidable = require('express-formidable');
var fs = require('fs');
var app = express();
var PORT = 8080;
app.use(express.static(__dirname+'/views'));
app.use(formidable.parse());
app.set('views', './views');
app.set('view engine', 'jade');
app.get('/', function(req, res){
res.render('index.jade');
});
js代码如下所示
var express = require('express');
var formidable = require('express-formidable');
var fs = require('fs');
var app = express();
var PORT = 8080;
app.use(express.static(__dirname+'/views'));
app.use(formidable.parse());
app.set('views', './views');
app.set('view engine', 'jade');
app.get('/', function(req, res){
res.render('index.jade');
});
当我尝试记录下面的变量统计时,我得到一个错误
TypeError:路径必须是字符串
index.jade文件呈现在下面
html
head
link(rel='stylesheet', href='style.css', type='text/css')
title Upload file for shortening
body
h1 Welcome to file metadata service
div(id='upload-button')
form(action='/upload', enctype='multipart/form-data')
input(name='Upload', type='file', id='upload-butt')
div(id="submit-button")
form(action = '/submit')
button(type="submit", value='Submit', id='submit-butt') Submit
script(src="https://code.jquery.com/jquery-2.2.0.min.js")
script(src="upload.js")
css样式如下所示
#submit-butt{
width:100px;
height:auto;
background-color:red;
cursor:pointer;
margin-left:150px;
}
#upload-butt{
width:200px;
height:auto;
cursor:pointer;
float:left;
}
h1{
font-family:Impact;
}
jQuery代码如下所示
$('#upload-butt').on('click', function(){
$('#upload-butt').on('change', function(){
var file = $(this).get(0).files;
if(file.length > 0){
var formData = new FormData();
formData.append('Upload', file, file.name);
$.ajax({
url: '/upload',
type: 'POST',
data:formData,
processData:false,
contentType:false,
success: function(data){
console.log('upload successful: '+data);
}
})
}
});
});
我如何处理打字错误?如何将路径转换为字符串?我拥有的是通过强大的中间件运行后获得的解析数据 将后端中的“/upload”更改为此代码。不要在其中使用req参数。没必要那样
app.post('/upload', function(req, res){
// create an incoming form object
var form = new formidable.IncomingForm();
// specify that we want to allow the user to upload multiple files in a single request
form.multiples = true;
// store all uploads in the /uploads directory
form.uploadDir = path.join(__dirname, '/uploads');
// every time a file has been uploaded successfully,
// rename it to it's orignal name
form.on('file', function(field, file) {
fs.rename(file.path, path.join(form.uploadDir, file.name));
});
// log any errors that occur
form.on('error', function(err) {
console.log('An error has occured: \n' + err);
});
// once all the files have been uploaded, send a response to the client
form.on('end', function() {
res.end('success');
});
// parse the incoming request containing the form data
form.parse(req);
});
上传端点的req.body值是多少?req.body可能是一个对象,fs正在寻找路径string@bmartin-当我尝试登录req.body时,我得到的只是对象{Upload:'}@VinnieJames-是的,我知道。我的问题是如何将其转换为文件路径?您只能在前端检查文件的大小。您甚至可以在上载文件之前执行此操作。只需使用“*.size”参数。e、 g.var size=file.size;当我尝试此操作时,会出现此错误。TypeError:Foremble.IncomingForm不是一个functionvar Foremble=require('Foremble');var form=new.IncomingForm();两件东西都检查一下,谢谢!我必须使用强大的模块,而不是快速强大的模块。谢谢你!你知道如何使用它来获得文件大小吗?我在任何地方都看不到路径字段,所以我假设我不能在这里使用fs模块,您可以从前端本身获取文件大小。即使您想在nodejs中执行此操作,也可以使用fs.statSync(文件名)。你已经有了路径,它在/uploads文件夹中,文件名也在file.name:)中指定。试试看。是的,我试过那种形式。在('file',function(field,file){fs.rename(file.path,path.join(form.uploadDir,file.name));console.log('in here');console.log(fs.statSync(file.name));};这似乎不起作用。没有输入回调函数,因为没有记录任何内容。