【发布时间】:2017-01-14 07:09:39
【问题描述】:
我有一个应用程序来推断用户上传的文件的大小。我的代码如下
server.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:路径必须是字符串
app.post('/upload', function(req, res){
var stats = fs.statSync(req.body);
console.log(stats);
});
app.listen(PORT, function(){
console.log('Express listening on port: '+PORT);
});
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);
}
})
}
});
});
如何处理 TypeError?如何将路径转换为字符串?我所拥有的是经过强大的中间件运行后得到的解析数据。
【问题讨论】:
-
上传端点的 req.body 值是多少?
-
req.body 可能是一个对象,fs 正在寻找一个路径字符串
-
@bmartin - 当我尝试记录 req.body 时,我得到的只是对象 {Upload: ' '}
-
@VinnieJames - 是的,我知道。我的问题是如何将其转换为文件路径?
-
只能在前端查看文件的大小。您甚至可以在上传文件之前执行此操作。只需使用“*.size”参数。例如var size = file.size;
标签: javascript jquery node.js