我正在尝试从我正在使用Cordova(Phonegap)开发的应用程序上传文件(图片),但我总是获得一个Error: Request Aborted.一开始我使用的fs.readFile()是我读过的第一件事,但现在我使用Fomidable但是错误是一样的:
错误
Error: Request aborted
at IncomingMessage.onReqAborted (../XAMPP/xamppfiles/htdocs/nodeyag/node_modules/express/node_modules/connect/node_modules/multiparty/index.js:131:17)
at IncomingMessage.EventEmitter.emit (events.js:117:20)
at abortIncoming (http.js:1912:11)
at Socket.serverSocketCloseListener (http.js:1924:5)
at Socket.EventEmitter.emit (events.js:117:20)
at TCP.close (net.js:466:12)
Run Code Online (Sandbox Code Playgroud)
/ picUpload
var form = new formidable.IncomingForm();
form.parse(req,function(err,fields,files) {
if(err) console.log(err);
console.log(files);
});
form.on('end',function(fields,files) {
// temporary location of the uploaded file
var tempPath = this.openedFiles[0].path;
// filename of the uploaded file
var fileName = this.openedFiles[0].name,
newPath = config.uploadPicsDir + '/docs/';
var file = { tempPath: tempPath, fileName: fileName …Run Code Online (Sandbox Code Playgroud) 网址样本:http://www.samplesite.com/?companyname = abcltd
我想在一个强大的隐藏字段中获取通过url传递的值。我在隐藏字段值中添加了[get param = companyname]。当我以管理员身份登录时效果很好。
但如果我注销,则尝试从url访问表单,该值不会在隐藏字段中填充。
function frm_set_checked($values, $field){
if($field->id == 104){
$values['value'] = $_GET['companyname'] ;
}
}
add_filter('frm_setup_new_fields_vars', 'frm_set_checked', 8, 2);
add_filter('frm_setup_edit_fields_vars', 'frm_set_checked', 8, 3);
Run Code Online (Sandbox Code Playgroud)
也尝试使用钩子。同样的事情发生了。对于已登录的用户,它将在隐藏字段中填充参数值。对于未登录的用户,它不会在隐藏字段中填充参数值。
感谢您的任何帮助
我的代码显示了一个简单的上传表单(node-formidable和node.js)。我用来socket.io更新客户端当前的上传文件进度。我的问题是我目前向每个客户发送进度更新。举个例子,如果我使用 clientA 开始上传,然后使用 clientB 连接到网站,clientB 将看到与 clientA 完全相同的进度条。通常情况下,clientA 和 clientB 应该不同,有各自的进度条,仅与各自的上传链接。
这是我的 app.js 文件
// Required modules
var formidable = require('formidable'),
http = require('http'),
util = require('util'),
fs = require('fs-extra');
// Path to save file, server side
var savePath = "./uploadedFiles/";
// Loading index.html
var server = http.createServer(function(req, res) {
// Form uploading Process code
//Upload route
if (req.url == '/upload' && req.method.toLowerCase() == 'post') {
// creates a new …Run Code Online (Sandbox Code Playgroud) 当我使用强大的解析函数时遇到问题。在我的项目中,我使用httpsys(不是内置的http模块)创建服务器(用于端口共享),然后发送带有多部分表单数据(包括字符串和zip文件)的post请求。然后我想使用formidable来解析请求体。但解析函数回调不会被调用。没有错误。我不使用 Express 应用程序,但我使用 Express Router 来路由我的请求。我已经使用错误处理程序来捕获错误,但它从未被调用(form.on('error', function(err) { console.log(err); });)。有人有同样的问题吗?请帮助我,提前致谢。
// main.js
var router = express.Router();
router.use(function (req, res, next) {
for (var i in req.headers) {
req.headers[i] = querystring.unescape(req.headers[i]);
req.headers[i] = req.headers[i].replace(/\+/g, "");
}
next();
});
//router.use(bodyParser());
router.post('/TestServer/' + 'TestRequest', function(req, res) {
testRequestHandler.execute(req, res);
});
var server = require('httpsys').http().createServer(router);
var port = '80'; // or other port
var listeningPort = 'http://localhost:' + port + '/TestServer/';
server.listen(listeningPort );
// In testRequestHandler
var execute = function(req, res) {
var form …Run Code Online (Sandbox Code Playgroud) 我有一个SendGrid'Inbound Parse Webhook'将已解析的电子邮件发布到Firebase Function。这会将multipart/form-data请求中的传入电子邮件发送到我的Firebase函数。
我正在尝试使用Formidable解析这些请求,但始终出现错误:
请求在IncomingMessage中终止。<匿名>
这已在此处报告,解决方案似乎是关闭主体解析,但是在firebase函数中可能吗?
我在 node.js 中看到了很多模块,比如 busboy , multer ,强大的但他们无法解析multipart/mixed正文。
multipart/mixednode.js中的请求示例
--batchbatch
Content-Type: multipart/mixed; boundary=changeset1
--changeset1
Content-Type: application/http
Content-Transfer-Encoding: binary
POST data HTTP/1.1
Content-Type: application/json
Content-ID: ID1
Content-Length: 10000
{
"Name": "ddd",
"data1": "3",
"data2": "40",
"data3": "OPPT",
"data3":"D1000",
"dat4": "D1000"
}
--changeset1--
--batchbatch
Content-Type: multipart/mixed; boundary=changeset2
--changeset2
Content-Type: application/http
Content-Transfer-Encoding: binary
PATCH data/32451 HTTP/1.1
Content-Type: application/json
Content-ID: ID1
Content-Length: 10000
{
"code": "3"
}
--changeset2--
--batchbatch
Content-Type: multipart/mixed; boundary=changeset3
--changeset3
Content-Type: application/http
Content-Transfer-Encoding: binary
DELETE /data/2345 HTTP/1.1
--changeset3--
--batchbatch--
Run Code Online (Sandbox Code Playgroud) 基本上我想从本地计算机上传一个 csv 文件并在后端解析它以执行所需的操作。我在前端附加了 csv 文件。检查它不为空。但我无法在服务器中获取相同的内容。我是否遗漏了某些内容或以错误的方式执行了某些操作?
这是我到目前为止所尝试过的。
前端代码:
<form id="myForm" method="POST" enctype="multipart/form-data" action='/testcsv' >
<input type="file" id="file" />
<input type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)
后端代码:
var express = require('express');
var methodOverride = require('method-override');
var http = require('follow-redirects').http;
var formidable = require('formidable');
var app = express();
const fs = require('fs');
app.use(methodOverride('_method'));
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
app.post('/testcsv', requireLogin, function(req, res) {
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) { …Run Code Online (Sandbox Code Playgroud) 我正在使用强大的 3rd 方模块开发 nodejs 应用程序。我正在尝试获得对下面 form.parse 方法返回的 webform 字段的全局范围访问(请参阅下面的 var formfields)。首先,form.parse 是一个异步操作,根据此处的模块文档:https : //github.com/felixge/node-formidable旨在接受回调。我正在这样做,请参阅传递给 form.parse 的匿名函数。
我的问题是,无论我做什么,我都无法让 form.parse 将字段对象正确返回到全局上下文/范围中的 formfields 变量。我已经尝试了(几天)回调函数和返回辅助函数等的闭包的各种组合。但没有运气。
我想做的基本事情是:
var form = new formidable.IncomingForm();
form.encoding = 'utf-8';
var formfields = form.parse(req, function (err, fields, files) {
console.log("within form.parse method, subject field of fields object is: " + fields.subjects);
return fields;
}); // form.parse
console.log("type of formfields is: " + typeof formfields);
console.log("subject field of formfields object is: " + formfields.subjects);
Run Code Online (Sandbox Code Playgroud)
但是正如您从下面的 console.log 输出中看到的那样,即使我正在使用回调,执行也会“下降”到最后 2 行 …
我计划构建一个基于Node.js的Web应用程序.作为一个常识,我安装了最新版本的Node.js(v0.10.0).我还建议使用express.js以避免使用低级API.
当我试图安装express.js包时,我发现它无法安装,因为缺少一些依赖.所以,我试图逐个安装所有缺失的依赖.除了formidable.js之外,所有包都可以安装,这需要node.js版本小于0.9.0("node":"<0.9.0")}.我很沮丧,因为对于我的新开发,我想使用最新的stalbe版本的Node.js,而不是选择一个非常早期的版本(0.9.0).
所以,如果我仍然想使用express.js,我真的应该将我的node.js回滚到早期版本(<0.9.0)吗?
我用来express处理发布请求并且难以解析上传的文件:
import * as admin from "firebase-admin";
import * as functions from "firebase-functions";
import * as formidable from "formidable";
import * as util from "util";
import * as express from "express";
admin.initializeApp();
const app = express();
app.post("/image", (req, res) => {
const form = new formidable.incomingForm();
form.parse(req, async function(err, fields, files) {
res.writeHead(200, { "content-type": "text/plain" });
res.write("received upload:\n\n");
res.end(util.inspect({ fields: fields, files: files }));
});
});
export const api = functions.https.onRequest(app);
Run Code Online (Sandbox Code Playgroud)
我已经在 firebase.json 中重写了源代码和函数。Internal Server Error …
express firebase formidable firebase-hosting google-cloud-functions
formidable ×10
node.js ×7
file-upload ×3
express ×2
firebase ×2
javascript ×2
busboy ×1
cordova ×1
getparameter ×1
multer ×1
socket.io ×1