當前位置:首頁 » 文件傳輸 » node讀取上傳表單
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

node讀取上傳表單

發布時間: 2022-07-06 02:53:46

Ⅰ 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中如何獲取文件上傳進度

  1. 前端html5支持獲取上傳的位元組數,同時也能獲取總位元組大小。這樣可以算出進度。

  2. node.js的後端request一般支持流模式,於是就可以用request.on('data', () => {})獲取到已上傳的位元組大小,前端獲取總位元組大小之後可以將信息放進request header里。這樣也可以算出進度