nodeexpress上传图片
① nodejs用express.bodyParser上传的时候怎么创建一个和上传文件名字一样的文件夹
req.body.file.path是原文件名,用fs.mkdir创建文件夹,把文件存进去就好了。
② 如何设置 node express favicon.ico
浏览器调用Favicon的原则是首先在网页所在的目录下寻找Favicon.ico文件,如果没有,便到网站的根目录下寻找。
因此,在网页中使用Favicon最简单的办法便是将制作好的图标文件命名为Favicon.ico,然后将其上传到网站的根目录即可。
如果您需要将Favicon.ico放到其他目录下,或者希望让不同的网页显示不同的Favicon,就需要在网页Html文件中做设定了,具体设置也很简单,在Html中的<head>部分加入如下的代码:
程序代码: <link rel=”icon” href=”/dir/favicon.ico” mce_href=”/dir/favicon.ico” type=”image/x-icon”>
<link rel=”shortcut icon” href=”/dir/favicon.ico” mce_href=”/dir/favicon.ico” type=”image/x-icon”>
Firefox还支持GIF动画格式的Favicon,使用方法如下:
首先制作一个16*16的gif动画,然后在html代码<head></head>中加入如下代码:
程序代码 <link rel="shortcut icon" href="favicon.ico" >
<link rel="icon" href="animated_favicon.gif" type="image/gif" >
③ node.js用uploadify上传本地图片后,把它放到canvas,无法使用todataurl()方法
你可以用一个file的input,在change事件里建立一个FileReader的instance,用readAsDataURL()读取文件的内容,不用上传服务器。
④ express nodejs怎么使用
Express 是一个简洁、灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。
1.express组织结构
app demo
|---node_moles------用于安装本地模块。
|---public------------用于存放用户可以下载到的文件,比如图片、脚本、样式表等。
|---routes------------用于存放路由文件。
|---views-------------用于存放网页的模板。
|---app.js------------应用程序的启动脚本。
|---package.json------项目的配置文件。
2..创建express服务器
//app.js文件
var express = require('express');
var app = express();
//指定更目录显示的内容
app.get('/', function(req, res){
res.send('Hello World');
});
//指定监听端口
var server = app.listen(3000, function() {
console.log('Listening on port %d', server.address().port);
});
运行nodejs应用程序
/>node app.js
3.中间件
中间件(middleware)就是处理HTTP请求的函数.
当一个HTTP请求进入服务器,服务器实例会调用第一个中间件,完成后根据设置,决定是否再调用下一个中间件.
中间件的参数为:
.四个的时候---第一个为错误处理,第二个为客户请求request,第三个为服务器响应respond,第四个为next中间件. 如function(error, request, response, next){}
.三个的时候---第一个客户请求request,第二个为服务器响应respond,第三个为next中间件. 如function(request, response, next){}
.两个的时候---第一个客户请求request,第二个为服务器响应respondfunction. 如function(request, response){}
4.使用中间件use
use是express调用中间件的方法,它返回一个函数.
app.use(function(request, response) {
response.writeHead(200, { "Content-Type": "text/plain" });
response.end("Hello world!\n");
});
5.错误内容显示
app.use(express.bodyParser());//使用body参数
app.use(express.methodOverride());//使用函数覆盖
app.use(app.router);//使用路由
app.use(function(err, req, res, next){
console.error(err.stack);
res.send(500, 'Something broke!');
});//错误内容显示
6.路由
express路由的方式有多种,这里举例常用的几种:
.app.use('/', middleware);//get/post时,对于路径/的处理
.app.get("/", middleware);//http中get时,对于路径/的处理
.app.post("/", middleware);//http中post时,对于路径/的处理
.app.put("/", middleware);//http中put时,对于路径/的处理
.app.delete("/", middleware);//http中delete时,对于路径/的处理
7.路径通配符*
.*表示所有路径
app.get("*", function(request, response) {
response.end("404!");
});//所有路径都返回404
.:捕获路径内容
app.get("/hello/:who", function(req, res) {
res.end("Hello, " + req.params.who + ".");
});//如"/hello/alice地网址,网址中的alice将被捕获,作为req.params.who属性的值
8.设置环境变量set
set用于指定变量的值.
app.set("view engine", "ejs");//使用ejs作为模版
9.response对象方法
.重定向redirect
response.redirect("/hello/anime");//重定向到/hello/anime
.发送文件sendFile
response.sendFile("/path/to/anime.mp4");
.渲染网页模板render,即把变换的内容加载到网页.
response.render("index", { message: "Hello World" });//将message变量传入index模板,值为"Hello World"渲染成HTML网页
10.requst对象方法
.获取客户ip地址:request.ip
.获取上传的文件:request.files
11.启动脚本package.json
package.json用于指定app信息,nodejs版本号和其他组件的依赖关系
{
"name": "demo",
"description": "My First Express App",
"version": "0.0.1",
"dependencies": {
"express": "3.x"
}
}
12.app入口app.js
app.js主要包含http的创建,基本路由,监听端口号
13.动态网页模板views
views文件夹,用于存放所有的放网页模板.
//app.js
app.get('/', function(req, res) {
res.render('index',{title:"最近文章"});
});
//index.js
this is <%=title%>!
14.指定静态网页目录
//app.js
app.use(express.static('public'));//指定静态网页目录,当浏览器发出非HTML文件请求时,服务器端就到public目录寻找这个文件
如:<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">, 服务器端就到public/bootstrap/css/目录中寻找bootstrap.css文件
⑤ nodejs可以上传大文件吗
可以。不过要修改。
处理方式为在nodeJs的app.js文件中写一个use中间件将其大小限制给修改了。
修改代码:(app.js中)
[javascript]view plain
app.use(express.bodyParser({limit:"5000kb"}));
app.use(express.json({limit:'5000kb'}));
这部分的代码顺序:(这个貌似没多大作用,不过还是留一个)
⑥ nodejs+express+ejs写的项目在pc端网页上传文件能获取到类型,但在安卓浏览器上不行,有何解决办法
FileReader 对象能拿到文件类型的,我写一段代码示例吧
varimg=document.getElementById('xFile')
varfile=img.files[0]
varreader=newFileReader()
reader.readAsDataURL(file)
reader.onload=function(){
console.log('***file.type',file.type)
}
话说财富值给的真少
⑦ nodejs 怎么从request获取上传文件
可以使用第三方的js库,比如spark-md5.js。上传文件后,调用对应的api即可以获取到上传文件的md5。
⑧ node.js的express模块支持多用户上传文件吗
使用nodejs+express(4.x+)实现文件上传
最简单的做法是通过“connect-multiparty”中间件实现上传。
通过在项目中npm install connect-multiparty进行安装。
用法:
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.post('/upload', multipartMiddleware, function(req, resp) {
console.log(req.body, req.files);
// don't forget to delete all req.files when done
});
上传后,上传的文件会在临时目录中生成一个临时文件,具体可将req.files打印出查看具体文件路径。
只要在注释的地方将临时文件移动并重命名到实际目录中即可完成上传功能。
简单。
但是官方不建议使用该中间件,建议直接使用“multiparty”,因为错误处理比较麻烦。
下面就用“multiparty”实现一个版本。
1.使用express(版本是4.11.x)创建一个项目,采用默认的jade作为模版引擎。
2.在项目目录中,通过npm install multiparty进行安装必要组件。
3.修改views/index.jade,如下做一个简单的用于文件上传的form。
⑨ 如何使用 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+" ");
}
。。。。。。
这样就实现了上传文件至数据库
⑩ nodejs中我用的express版本是3,用multer上传文件,但是加上app.use(express.bodyParser());就不能上传了
试试bodyParser的raw()。
var bodyParser = require('body-parser')
app.use(bodyParser.raw())