javascript - 如何在节点js中上传文件到服务器上?
问题描述
你能告诉我如何将文件上传到当前示例(uploads
文件夹)的某个目录。这是我的服务器端代码
app.post('/upload', function (req, res) {
console.log('abcc')
upload(req, res, function (err) {
if (err) {
res.json({error_code: 1, err_desc: err});
return;
}
res.json({error_code: 0, err_desc: null});
});
});
完整代码节点js https://repl.it/repls/LustrousCharmingCommunication
我使用此服务器并使用客户端访问服务并仅上传附件
这是我的请求客户端代码 https://jsbin.com/luwezirive/edit?html,js,output
$(function () {
$('.submit').on('click', function (e) {
e.preventDefault();
e.stopPropagation();
if ($('#fileId').val().length === 0) {
alert('please insert file')
} else {
var form = $('#fileUploadForm')[0];
// Create an FormData object
var data = new FormData(form);
console.log('fffff')
$.ajax({
url: 'https://lustrouscharmingcommunication--five-nine.repl.co/upload',
type: 'POST',
data: data,
cache: false,
enctype: 'multipart/form-data',
dataType: 'json',
processData: false, // Don't process the files
contentType: false, // Set content type to false as jQuery will tell the server its a query string request
success: function (data, textStatus, jqXHR) {
console.log('succsss');
if (typeof data.error === 'undefined') {
// Success so call function to process the form
}
else {
// Handle errors here
console.log('ERRORS: ' + data.error);
}
},
error: function (jqXHR, textStatus, errorThrown) {
// Handle errors here
console.log('ERRORS: ' + textStatus);
// STOP LOADING SPINNER
}
});
}
})
})
我得到了成功,但文件没有上传,为什么?
上传方式
var storage = multer.diskStorage({ //multers disk storage settings
destination: function (req, file, cb) {
cb(null, './uploads/')
},
filename: function (req, file, cb) {
var datetimestamp = Date.now();
cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length - 1])
}
});
var upload = multer({ //multer settings
storage: storage
}).single('file');
任何更新 ?
解决方案
最简单的方法是使用multer
. https://github.com/expressjs/multer
取自文档的示例:
var express = require('express')
var multer = require('multer')
var upload = multer({ dest: 'uploads/' })
var app = express()
app.post('/profile', upload.single('avatar'), function (req, res, next) {
// req.file is the `avatar` file
// req.body will hold the text fields, if there were any
})
推荐阅读
- elasticsearch - 使用 logstash 流式传输 API
- html - 在css中将文本与div中的正方形内的底部对齐
- vb.net - 发生 SQL 异常?
- node.js - 函数调用时返回未定义
- node.js - NodeJS bot 没有转义 if 语句
- storage - 如果没有超过限制的快照,引用的备份快照是否会被删除?
- angular2-nativescript - 无法使带有 typescript 的扩展 Java 接口在 Nativescript 中工作
- vba - 如何根据值excel VBA将多行复制到特定单元格中的另一张表
- c++ - c++ exeption 类继承到模板类
- arrays - 用许多数组构建结构