Ⅰ node 服務怎麼接收表單數據
例如:A表格的A1要與B表格A1相同,那就是把兩個表格都打開,在B表格的A1內輸入:=,再點擊A表格的A1再回車確認就OK啦. 這樣A表格的A1發生變化,在打開B表格時會提示更新,點"更新"就會同步變化了.
Ⅱ 如何使用 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 怎麼從request獲取上傳文件
可以使用第三方的js庫,比如spark-md5.js。上傳文件後,調用對應的api即可以獲取到上傳文件的md5。
Ⅳ 最近在研究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」);
}
})
}
});
};
Ⅳ Node.js 怎麼處理批量表單數組的提交
處理的方法有兩種,他們是:表單數據一種是get方式, 另一種是post 方式
方法如下:
1.get方式
對於get方式,node處理起來非常簡單
如以下代碼:
var urlParsed = url.parse(request.url);
var getData = querystring.parse(urlParsed.query);
//getData 為object類型 同名表單為array
get返回結果:
{
name: "blue5tar",
hobby:["read", "surfing"]
}
2. post方式
post方式處理起來比較麻煩,但是有了node-formidable 這個mole 我們就省事多了
使用npm安裝 node-formidable
npm install formidable
formidable 使用方法
formidable = require("formidable"); //載入 formidable
var form = new formidable.IncomingForm();
var post = {},
file = {};
form.uploadDir = '/tmp'; //文件上傳 臨時文件存放路徑
form
.on('error', function(err) {
console.log(err); //各種錯誤
})
//POST 普通數據 不包含文件 field 表單name value 表單value
.on('field', function(field, value) {
if (form.type == 'multipart') { //有文件上傳時 enctype="multipart/form-data"
if (field in post) { //同名表單 checkbox 返回array 同get處理
if (util.isArray(post[field]) === false) {
post[field] = [post[field]];
}
post[field].push(value);
return;
}
}
post[field] = value;
})
.on('file', function(field, file) { //上傳文件
file[field] = file;
})
.on('end', function() {
fn(); //解析完畢 做其他work
});
form.parse(request); //解析request對象
post方式有個bug
當form 有enctype=「multipart/form-data」 和沒有 enctype=「multipart/form-data」 時 同名表單處理的方式不一樣。
有 enctype=「multipart/form-data」 時 同名表單會被最後一個value覆蓋,
沒有 enctype="multipart/form-data"時,同get一樣 會返回一個array
所以, 在 'field』事件時,對form.type進行不同處理 , 同名表單都返回array
還有一個問題,上傳文件時 如果不選擇文件 也會在臨時目錄生成空的臨時文件, 解決辦法:
修改 formidable 模塊 lib/incoming_form.js handlePart方法 在183行處添加:
if (part.filename == "") {
return;
}
上傳文件返回的結構如下:
{
size: 40635, //文件大小
path: '/tmp/', //臨時文件路徑
name: 'arrow.png', //文件名稱
type: 'image/png', //文件 mime
lastModifiedDate: Sun, 11 Mar 2012 07:19:44 GMT,
_writeStream:
{ path: '/tmp/',
fd: 7,
writable: false,
flags: 'w',
encoding: 'binary',
mode: 438,
bytesWritten: 40635,
busy: false,
_queue: [],
drainable: true },
length: [Getter], //同size
filename: [Getter], //同name
mime: [Getter] //同type
}
文件上傳到臨時文件目錄下,我們還要將臨時文件, 移到我們的上傳目錄中
fs.rename(file.path, global.appConfig.uploadDir + '/' + file.filename);
Ⅵ nodejs解析FormData發送過來的表單數據,下圖是nodejs後台列印輸出的req.body
Node接收表單數據,用multiparty模塊
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: 'INVALID_PARAM'};
res.send(errcode);
return;
} else {
var inputFile = files.file[0];
var uploadedPath = inputFile.path;
console.log(uploadedPath);
var dstPath = '../appData/excel/' + UUID.v1() + '.xls';
FS.rename(uploadedPath, dstPath, function(err) {
if (err) {
var errcode = {result: 'INVALID_PARAM'};
res.send(errcode);
console.log('rename error: ' + err);
return;
} else {
console.log('rename ok');
}
})
}
});
};
Ⅶ Nodejs中怎麼獲取HTML中一個form下的所有POST數據
首先獲取http,並創建一個web服務,監聽本地埠1337,這個可以修改,任何未被佔用的埠都可以用,並堅挺data事件和end事件,整個文件保存為app.js
下面這里貼上測試代碼
////////////////app.js///////
var http = require('http');
var server = http.createServer(function(req,res){
if(req.url!=="/favicon.ico"){
req.on('data',function(data){
console.log("伺服器接收到的數據:"+decodeURIComponent(data));
});
req.on("end",function(){
console.log('客戶端請求數據全部接收完畢');
});
}
res.end();
}).listen(1337,"localhost",function(){
console.log("listened");
});
////////////////index.html///////
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Nodejs的data事件與end事件的回調函數測試用頁面</title>
</head>
<body>
<form id= "form1" action = "http://localhost:1337/" method = "post">
姓名:<input type = 'text' name = "name" value ="dragon"><br/>
年齡:<input type = "number" name = "age" value ="25">
<input type = "submit" value =" 提交"/>
</form>
</body>
</html>
Ⅷ nodejs後台,用formidable處理上傳文件時,前台需要傳什麼參數給後端
用一個表單<form method="post" enctype="multipart/form-data" action="/file-upload"> <input type="file" name="thumbnail"> <input type="submit"></form>這樣就可以了
Ⅸ node js 怎麼獲取request payload
你這form表單是上傳附件了嗎?在form表單中加上 enctype="multipart/form-data" 這個屬性是就會出去你那種情況,如果你表單不需要上傳附件,就把這個屬性去掉應該就可以了。
Ⅹ 在Node.js中如何獲取文件上傳進度
前端html5支持獲取上傳的位元組數,同時也能獲取總位元組大小。這樣可以算出進度。
node.js的後端request一般支持流模式,於是就可以用request.on('data', () => {})獲取到已上傳的位元組大小,前端獲取總位元組大小之後可以將信息放進request header里。這樣也可以算出進度