只是现在主要用nodejs做后端了,所以记录一些上传文件的使用方法。

上传文件的主要方式:

1、form上传,优点是方便,缺点是没法回调,上传后返回的数据没法处理

2、ajax上传,优点是可控制,有回调,缺点是不太方便

用form上传,express后端接收,有很多插件,如formidable。但是没有回调。

用ajaxFileUpload上传,express后端接收。看着像是ajax上传,其实中间会生成form multipart/form-data,所以可以使用multer接收,还有回调,确实挺不错的。

1、form上传

示例已经归档

2、ajax上传:使用ajaxfileupload上传,nodejs后端接受。

html

<form>
<input type='file' value='文件导入' id='csv_import' name='csv_import'/>
<input type='button' value='上传' id='csv_upload' name='csv_upload'/>
</form>
// form不需要添加其他属性
// input name和id保持一致

js

$.ajaxFileUpload({
url: '/csvUpload',
type: 'post',
secureuri: false,
fileElementId: 'csv_import',
data: {
"userId": 123
},
dataType: 'json',
success: function(data, status){
debugger },
error: function(data, status, e){
debugger
}
});
// 修改fileElementId

nodejs

var form = new multiparty.Form();
form.parse(req, function(err, fields, files){ if(err){
console.log('parse error:'+err);
}else{
var input_file = files.csv_import[0];
var uploaded_path = input_file.path;
var buf = new Buffer(1024*input_file.size); // 获取文件的内容,作为一个base,这里只是读取文件的内容,并没有存储
fs.open(uploaded_path, 'r+', function(err, fd) {
if (err) {
return console.error(err);
}
fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
if (err){
console.log(err);
} var a = buf.slice(0, bytes).toString().split('\r\n');
var b = a.map(function(a_item){
return a_item.split(',');
}) console.log(util.inspect({b: b})); });
});
}
}) // 需要安装multiparty
// files.csv_import中的csv_import与id保持一致
// csv_import是id

注意:后端返回数据的方式

res.send(JSON.stringify({
code: 0,
msg: '导入成功'
}));

使用ajaxfileupload和multiparty上传文件时,碰到了一个问题:上传后直径跳转到/a?file_upload=...,并没有按照res.redirect('/')来执行,好奇怪;success error也没有捕获到返回的数据。

nodejs 上传文件 upload的更多相关文章

  1. nodejs --- 上传文件并保存到磁盘

    先复习下整个请求的过程 const express = require('express'); const static = require('express-static'); const cook ...

  2. HTTPWebrequest上传文件--Upload files with HTTPWebrequest (multipart/form-data)

    使用HTTPWebrequest上传文件遇到问题,可以参考Upload files with HTTPWebrequest (multipart/form-data)来解决 https://stack ...

  3. layui上传文件配合进度条

    首先看一下效果图: 修改layui的源文件upload.js 1.打开layui/modules/upload.js 2.搜索ajax 3.找到url: 4.添加以下代码: ,xhr:l.xhr(fu ...

  4. layui上传文件前加入确认提示

    //上传文件 upload: function () { layui.use('upload', function () { var upload = layui.upload; //执行实例 var ...

  5. 解析Spring MVC上传文件

    新建一个普通的maven工程 在pom.xml文件中引入相应的坐标 <?xml version="1.0" encoding="UTF-8"?> & ...

  6. nodejs教程---基于expressJs框架,实现文件上传(upload)?

    文件上传功能在nodejs初期是一件很难实现的功能,之后出现了formidable勉强能解决这个问题,但是express框架出现之后基于这个框架开发的中间件有更好的方法来处理文件上传,这个中间件就是m ...

  7. nodejs express 上传文件 (格式 FormData)

    前台代码使用jQuery的ajax: <script type="text/javascript"> $(function(){ $('#file_upload').c ...

  8. react native android 上传文件,Nodejs服务端获取上传的文件

    React Native端 使用react-native-image-picker 做出选择图片的操作,选择完成后,直接将图片Post至服务器,保存在服务器的某个地方(保存图片的路径需要公开显示),并 ...

  9. Nodejs学习笔记(八)--- Node.js + Express 实现上传文件功能(felixge/node-formidable)

    目录 前言 formidable简介 创建项目并安装formidable 实现上传功能 运行结果 部分疑惑解析 写在之后 前言 前面讲了一个构建网站的示例,这次在此基础上再说说web的常规功能---- ...

随机推荐

  1. 机房servlet类实验

    源代码1: import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class accept extend ...

  2. oracle 网络环境配置

    PLSQL Developer连接Oracle11g 64位数据库配置详解 最近换了台64bit的电脑,所以oracle数据库也跟着换成了64bit的,不过 问题也随之产生,由于plsql devel ...

  3. Containerpilot 配置文件 之 Jobs

    ContainerPilot job是用户定义的进程和规则,用于何时执行它,如何进行健康检查,以及如何向Consul做广告. 这些规则旨在允许灵活性覆盖几乎可能要运行的任何类型的进程. 一些可能的jo ...

  4. Ansible playbooks

    Playbook是Ansible的配置,部署和编排语言. 他们可以描述您希望远程系统执行的策略,或一般IT流程中的一组步骤. 如果Ansible modules是您workshop的工具,则playb ...

  5. 1D Blending

    [1D Blending] BlendTree有类型之分,分为1D.2D.本文记录1D. 1D Blending blends the child motions according to a sin ...

  6. 前端基础之Bootstrap

    1. 页面加载完之后才执行的JS代码        1. DOM方式            window.onload = function(){}        2. jQuery方式       ...

  7. ios runtime简单实用(添加动态属性)

    #import "Person.h" @interface Person (PersonCategory)   // 添加Person中没有的name属性 @property (n ...

  8. vmware搭建vSAN提示磁盘不合格或者看不到磁盘的解决办法

    1.如果磁盘不合格,或者在创建磁盘组的时候看不到该磁盘,一般的原因都是该磁盘有其他分区,可以使用下面的方法来解决 a.首先开启esxi主机的ssh功能 b.登陆到esxi的后台 c. ls /dev/ ...

  9. 面向对象 Java练习

    package xin.bao; public class Pingguo { private String Zhonglei;// 种类 public String getZhonglei() { ...

  10. pip常用操作指令

    1.安装模块 pip install vitualenv pip install -r requirement.txt 2.查询模块信息 pip show pip 3.显示已经安装的模块 pip li ...