过去几天我一直在研究,但我想不出这个问题。
目标:用户使用angular-file-upload表单上传一个文本文件,multer将文件保存到一个临时文件夹。然后发布数据,用户可以在同一页面或重定向页面上看到文件元数据和内容。
问题:在我的POST路由中,我可以console.log(req.file),它显示文件元数据。文件保存到临时文件夹。
我尝试res.send(req.file)、res.json(req.file)、绑定控制器作用域中的元数据的数据、res.locals、中间件函数以及许多其他我甚至不记得的东西。json对象从来没有进入视图。
以下是我正在处理的内容的一个片段。
routes.js
var express = require('express');
var app = express();
var router = express.Router();
router.get('/test', function(req, res, next){
res.render('test', {title: 'Test'});
});
router.post('/test', function(req, res, next){
console.log(req.file);
res.json(req.file);
});
module.exports = router;
应用.js
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var logger = require('morgan');
var sys = require('sys');
var multer = require('multer');
var app = express();
// Local Files
var routes = require('./routes/index');
var users = require('./routes/users');
var favicon = require('serve-favicon');
// console.log(__dirname + '/public/scripts/test.py');
// Create multer object for file uploads
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './tmp/')
}
// filename: function (req, file, cb) {
// cb(null, file.originalname + "%" + Date.now())
// }
});
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// app.use(express.bodyParser( { keepExtensions: true, uploadDir: __dirname + '/photos' } ));
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'bower_components')));
app.use(multer({ storage: storage }).single('file'));
app.use('/', routes);
app.use('/users', users);
controller.js
var t = angular.module('upload', ['ngFileUpload']);
t.controller('ctrl', ['$scope', 'Upload', '$timeout', function ($scope, Upload, $timeout) {
$scope.f = '';
$scope.uploadFiles = function(file) {
$scope.f = file;
console.log(file);
if (file && !file.$error) {
file.upload = Upload.upload({
url: '/test',
file: file
});
file.upload.then(function (response) {
$timeout(function () {
file.result = response.data;
});
}, function (response) {
if (response.status > 0)
$scope.errorMsg = response.status + ': ' + response.data;
});
file.upload.progress(function (evt) {
file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
});
}
}
}]);
请求文件
{ fieldname: 'file',
originalname: 'lorem.rtf',
encoding: '7bit',
mimetype: 'text/rtf',
destination: './tmp/',
filename: '0b9d25cc663a05628059bd56a0aef4bc',
path: 'tmp/0b9d25cc663a05628059bd56a0aef4bc',
size: 815 }
我不知道为什么这是有效的,而我在做什么。(我觉得我尝试了很多相同的变体)我紧贴着角度文件上传文档,能够将响应对象设置为范围变量。
唯一值得注意的区别是,我没有将Upload函数设置为变量,也没有对变量调用actions。相反,所有的事件被串成一个。
routes.js和app.js保持不变。
新控制器.js功能
$scope.upload = function (file) {
Upload.upload({
url: '/test',
data: {file: file}
}).then(function (resp) {
console.log('Success ' + resp.config.data.file.name + ' uploaded. Response: ' + resp.data);
console.log(resp.data);
$scope.obj = resp.data;
}, function (resp) {
console.log('Error status: ' + resp.status);
}, function (evt) {
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
console.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);
});
};
您可以尝试JSON.stringify序列化它。看看这是否能正确地呈现req.file。您仍然可以手动将标题设置为text/json。
问题内容: 我想在单个请求中发送多个不同的JSON对象,我觉得在单个请求中像文件一样流式传输多个JSON对象会更好,所以请告诉我是否可行,如果可以的话请给我一个思路要使用Alamofire做到这一点,下面是我要发布的原始正文(应用程序/ json)数据的格式 我尝试了下面的代码,但是由于body参数的格式不正确,因此无法正常工作,这就是我想尝试在单个请求中将多个JSON对象作为流发送的原因,请注意
我们正在尝试为现有的java web应用程序创建一个Android应用程序,并尝试访问java JSON数据。 我们对如何将JSON数据发送到请求感到震惊。 我们考虑创建一个java api并作为请求的响应发送。 请提出任何解决方案, 提前谢谢。
问题内容: 在尝试使用javascript手动格式化JSON数据并失败后,我意识到可能有更好的方法。这是Web服务方法和相关类的代码在C#中的样子: 该Web服务可以很好地使用SOAP / XML,但是我似乎无法使用javascript和jQuery得到有效的响应,因为我从服务器返回的消息存在我的手工编码JSON问题。 我不能使用jQuery 函数,因为该请求需要HTTP POST,因此我改用了较
问题内容: 我想发送以下JSON文本 到Web服务并读取响应。我知道如何读取JSON。问题是上述JSON对象必须以变量名发送。 我该如何从android做到这一点?创建请求对象,设置内容标头等步骤是什么。 问题答案: Android没有用于发送和接收HTTP的特殊代码,您可以使用标准Java代码。我建议使用Android随附的Apache HTTP客户端。这是我用来发送HTTP POST的代码片段
我想发送一个JSON对象(注意,它不应该转换成字符串,因为服务器端代码是基于Spring starter项目的,它的params为(@requestbody PCAP PCAP))我有下面的代码,但它将主体转换成一个字符串,这给了我400个错误的请求。 注意:服务器端代码为
问题内容: 我如何/可以将json对象传递给webapi控制器(POST),并且 没有 类可将其映射到,而是将其作为任意内容来处理? 因此,如果我像这样从客户那里传递消息: 数据是这样的: 我的控制器将能够解析吗?下次数据可能与该签名不匹配(例如: 在我的控制器中,我尝试过: 和: 和(因为这实际上是与mongo数据库一起使用): 但是看起来对象映射器想要映射到字符串以外的其他东西… 问题答案: