Javascript 使用ajax和node.js上传文件,无需express
大家好,我正在尝试用ajax和node发送文件,但我找不到显示我如何做的信息!!,我现在已经建立了一个脚本,但我可以遵循更多Javascript 使用ajax和node.js上传文件,无需express,javascript,ajax,node.js,multipartform-data,formidable,Javascript,Ajax,Node.js,Multipartform Data,Formidable,大家好,我正在尝试用ajax和node发送文件,但我找不到显示我如何做的信息!!,我现在已经建立了一个脚本,但我可以遵循更多 var server=http.createServer(function(req, res){ if(req.url==='/upload'){ if(req.method==='OPTIONS'){//OPTIONS is the method that show in the server when i send files
var server=http.createServer(function(req, res){
if(req.url==='/upload'){
if(req.method==='OPTIONS'){//OPTIONS is the method that show in the server when i send files
req.on('data', function(a){
console.log(a);//i dont know what are?? after to here!!
});
}
}
});
我听过一些模块,比如“强大”,但我不能运行它
谢谢
我可以用强大的:)看看下面的代码:
var server=http.createServer(function(req, res){
if(req.url==='/upload'){
var headers = {};
// IE8 does not allow domains to be specified, just the *
// headers["Access-Control-Allow-Origin"] = req.headers.origin;
headers["Access-Control-Allow-Origin"] = "*";
headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS";
headers["Access-Control-Allow-Credentials"] = false;
headers["Access-Control-Max-Age"] = '86400'; // 24 hours
headers["Access-Control-Allow-Headers"] = "X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept";
if(req.method==='OPTIONS'){
res.writeHead(200, headers);
res.end();
}else if(req.method==='POST'){
var form = new formidable.IncomingForm(),
files = [],
fields = [];
form.uploadDir = '/home/sonick7/';//direccion donde va a ser gusradado
form.on('field', function(field, value) {
fields.push([field, value]);
})
.on('file', function(field, file) {
console.log(file.name, file.size, file.type, file.path)
files.push([field, file]);
})
.on('end', function() {
console.log('Upload terminado ');
res.writeHead(200, headers);
res.end();
});
form.parse(req);//no se que hace eso y para que sirve el modulo util?
}
}
});
如果您使用
选项
收到客户的请求,则可能意味着客户首先发送CORS请求。我不确定您使用的是哪个客户端库,AFAKI AngularJS将在每个Ajax请求中发送CROS请求
因此,您需要在服务器端处理这个OPTIONS
请求,告诉客户端这是一个有效的CROS请求,然后客户端应该发送文件上传请求(POST
maybe)
下面的代码是我在项目中使用express
模块处理开发环境中的CORS请求的代码,这意味着它允许来自任何来源的请求。在生产环境中,您需要检查源标题并接受您信任的标题
app.configure(function () {
app.use(function (req, res, next) {
var oneof = false;
if (req.headers.origin) {
res.header('Access-Control-Allow-Origin', '*');
oneof = true;
}
if (req.headers['access-control-request-method']) {
res.header('Access-Control-Allow-Methods', 'OPTIONS, HEAD, GET, POST, PUT, DELETE');
oneof = true;
}
if (req.headers['access-control-request-headers']) {
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Range, Content-Disposition, Authentication');
oneof = true;
}
if (oneof) {
res.header('Pragma', 'no-cache');
res.header('Cache-Control', 'no-store, no-cache, must-revalidate');
res.header('Content-Disposition', 'inline; filename="files.json"');
}
if (oneof && req.method == 'OPTIONS') {
res.send(200);
}
else {
next();
}
});
});
app.configure(函数(){
应用程序使用(功能(请求、恢复、下一步){
var oneof=假;
if(请求标题源){
res.header('Access-Control-Allow-Origin','*');
其中一个=真;
}
if(请求头['access-control-request-method']){
res.header('Access-Control-Allow-Methods','OPTIONS,HEAD,GET,POST,PUT,DELETE');
其中一个=真;
}
if(请求头['access-control-request-headers']){
res.header('Access-Control-Allow-Headers','Content Type,Content Range,Content Disposition,Authentication');
其中一个=真;
}
如果(其中一个){
res.header('Pragma','no cache');
res.header('Cache-Control','no store,no Cache,must revalidate');
res.header('Content-Disposition','inline;filename=“files.json”');
}
if(其中一个&&req.method=='OPTIONS'){
res.send(200);
}
否则{
next();
}
});
});
更新和解决
let server=http.createServer((req, res)=>{
if(req.url==='/upload'){
let headers = {}
// IE8 does not allow domains to be specified, just the *
headers={
'Access-Control-Allow-Origin':'*',
'Access-Control-Allow-Methods':'POST, GET, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Credentials':false,
'Access-Control-Max-Age':'86400', // 24 hours
'Access-Control-Allow-Headers':'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'
}
if(req.method==='OPTIONS'){
res.writeHead(200, headers)
res.end()
}else if(req.method==='POST'){
let form=new formidable.IncomingForm(),
files=[],
fields=[]
form.uploadDir='/home/sonick7/'
form.on('field', (field, value)=>{
fields.push([field, value])
})
.on('file', (field, file)=>{
files.push([field, file])
})
.on('end', ()=>{
console.log(files, fields, 'FT here awefwa', __filename)
console.log('Upload terminado ')
res.writeHead(200, headers)
res.end()
})
form.parse(req)
}
}
})