nodejs上传
1. angularjs结合nodejs实现文件的上传怎么弄
下面就用“multiparty”实现一个版本。
1.使用express(版本是4.11.x)创建一个项目,采用默认的jade作为模版引擎。
2.在项目目录中,通过npm install multiparty进行安装必要组件。
3.修改views/index.jade,如下做一个简单的用于文件上传的form。
1 extends layout
2
3 block content
4 form(method='post', action='/file/uploading', enctype='multipart/form-data')
5 input(name='inputFile', type='file', multiple='mutiple')
6 input(name='btnUp', type='submit',value='上传')
4.修改routes/index.js,实现上传页面和上传响应的后台代码。
1 var express = require('express');
2 var router = express.Router();
3 var multiparty = require('multiparty');
4 var util = require('util');
5 var fs = require('fs');
6
7 /* 上传页面 */
8 router.get('/', function(req, res, next) {
9 res.render('index', { title: 'Express' });
10 });
11
12 /* 上传*/
13 router.post('/file/uploading', function(req, res, next){
14 //生成multiparty对象,并配置上传目标路径
15 var form = new multiparty.Form({uploadDir: './public/files/'});
16 //上传完成后处理
17 form.parse(req, function(err, fields, files) {
18 var filesTmp = JSON.stringify(files,null,2);
19
20 if(err){
21 console.log('parse error: ' + err);
22 } else {
23 console.log('parse files: ' + filesTmp);
24 var inputFile = files.inputFile[0];
25 var uploadedPath = inputFile.path;
26 var dstPath = './public/files/' + inputFile.originalFilename;
27 //重命名为真实文件名
28 fs.rename(uploadedPath, dstPath, function(err) {
29 if(err){
30 console.log('rename error: ' + err);
31 } else {
32 console.log('rename ok');
33 }
34 });
35 }
36
37 res.writeHead(200, {'content-type': 'text/plain;charset=utf-8'});
38 res.write('received upload:\n\n');
39 res.end(util.inspect({fields: fields, files: filesTmp}));
40 });
41 });
42
43 mole.exports = router;
完成。
“multiparty”的用法详见:
www.npmjs.com/package/multiparty
github.com/andrewrk/node-multiparty
2. nodejs上传文件到服务器保存原始文件名
如下:
1. index.js模块: 程序入口, 有服务器(server.js)和路由(route.js)和处理(handler.js)模块组成;
2. server.js模块: 专门处理不同路由, 并做相应的处理;
3. route.js模块: 请求的地址, 处理方法, 响应, 请求;
4. handler.js模块: 封装不同的方法,交由路由route.js模块来选择调用;
5. HTML文件: 存在HTML文件; 6. package.json模块: CommonJS规定的规范;
3. 如何使用 NodeJS 将文件或图像上传到服务器
下面先介绍上传文件到服务器(多文件上传):
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;
import org.apache.commons.fileupload.*;
public class upload extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GB2312";
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out=response.getWriter();
try {
DiskFileUpload fu = new DiskFileUpload();
// 设置允许用户上传文件大小,单位:字节,这里设为2m
fu.setSizeMax(2*1024*1024);
// 设置最多只允许在内存中存储的数据,单位:字节
fu.setSizeThreshold(4096);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
fu.setRepositoryPath("c://windows//temp");
//开始读取上传信息
List fileItems = fu.parseRequest(request);
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
//正则匹配,过滤路径取文件名
String regExp=".+////(.+)$";
//过滤掉的文件类型
String[] errorType={".exe",".com",".cgi",".asp"};
Pattern p = Pattern.compile(regExp);
while (iter.hasNext()) {
FileItem item = (FileItem)iter.next();
//忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
String name = item.getName();
long size = item.getSize();
if((name==null||name.equals("")) && size==0)
continue;
Matcher m = p.matcher(name);
boolean result = m.find();
if (result){
for (int temp=0;temp<ERRORTYPE.LENGTH;TEMP++){
if (m.group(1).endsWith(errorType[temp])){
throw new IOException(name+": wrong type");
}
}
try{
//保存上传的文件到指定的目录
//在下文中上传文件至数据库时,将对这里改写
item.write(new File("d://" + m.group(1)));
out.print(name+" "+size+"");
}
catch(Exception e){
out.println(e);
}
}
else
{
throw new IOException("fail to upload");
}
}
}
}
catch (IOException e){
out.println(e);
}
catch (FileUploadException e){
out.println(e);
}
}
}
现在介绍上传文件到服务器,下面只写出相关代码:
以sql2000为例,表结构如下:
字段名:name filecode
类型: varchar image
数据库插入代码为:PreparedStatement pstmt=conn.prepareStatement("insert into test values(?,?)");
代码如下:
。。。。。。
try{
这段代码如果不去掉,将一同写入到服务器中
//item.write(new File("d://" + m.group(1)));
int byteread=0;
//读取输入流,也就是上传的文件内容
InputStream inStream=item.getInputStream();
pstmt.setString(1,m.group(1));
pstmt.setBinaryStream(2,inStream,(int)size);
pstmt.executeUpdate();
inStream.close();
out.println(name+" "+size+" ");
}
。。。。。。
这样就实现了上传文件至数据库
4. nodejs可以上传大文件吗
可以。不过要修改。
处理方式为在nodeJs的app.js文件中写一个use中间件将其大小限制给修改了。
修改代码:(app.js中)
[javascript]view plain
app.use(express.bodyParser({limit:"5000kb"}));
app.use(express.json({limit:'5000kb'}));
这部分的代码顺序:(这个貌似没多大作用,不过还是留一个)
5. 最近在研究nodejs如何实现文件上传功能
前端formdata或者Ajax上传文件
Node端:用multiparty接收文件,再用fs.rename将文件存储到你需要的位置。
var MULTIPARTY = require('multiparty');
var FS = require('fs');
var saveTowerFile = function (req, res, next) {
var form = new MULTIPARTY.Form({uploadDir: "../appData/excel/"});
form.parse(req, function (err, fields, files) {
if (err) {
console.log("上传失败!" + err);
var errcode = {result: "失败"};
res.send(errcode);
return;
} else {
var inputFile = files.file[0];
var uploadedPath = inputFile.path;
var dstPath = '../appData/excel/' + UUID.v1();
FS.rename(uploadedPath, dstPath, function(err) {
if (err) {
var errcode = {result: "失败"};
res.send(errcode);
return;
} else {
debug('rename ok');
res.send(“OK”);
}
})
}
});
};
6. nodejs 上传文件哪个插件好
前端要用easyui的filebox插件,然后点击按钮后会异步上传
7. 上传nodejs工程到服务器 提示需要加载一些用不到的模块
你好,请检查你的package.json内的Dependencies或者DevDependencies(依赖项)字段是否包含报错的模块及版本信息。
如果你本地是采用npm
install
xxx的方式安装模块是不会将该模块添加到依赖项的。
你需要通过npm
install
xxx
--save的方式进行模块安装。才能保证服务器和本地的依赖项是一样的,这样服务器在安装依赖时才会让node_moles和本地保持一致。
学习Linux的话,推荐学习一下《Linux就该这么学》
8. 如何提高nodejs的上传并发
不是node.js能应对高并发,其他人不能,而只是node.js用了另外的办法而已。
node.js的http mole处理web request都是用的异步的function,这样系统在等待文件的IO、数据库的query这些不需要这个进程的程序亲自处理的事情时,可以先去开始处理下一个web request。所以,node.js只要启动跟你的cpu的核心数一样多的进程数,就可以保证使用到你全部的计算能力。
如果用其他的语言,比如用python,你在设置mod_wsgi的时候可以设定让它启动多少个thread,这样如果一个thread正停在那儿等待io的时候,虽然这个thread不能像node.js那样先去处理下一个request,但你有别的空闲的thread可以处理这个request,操作系统会自动把cpu分配给各个thread。
9. nodejs怎么实现多文件上传
前端formdata或者Ajax上传文件 Node端:用multiparty接收文件,再用fs.rename将文件存储到你需要的位置。 var MULTIPARTY = require('multiparty'); var FS = require('fs'); var saveTowerFile = function (req, res, next) { var form = new M.