如何编写用于文件上传的 Node.js Express API?

2024-01-04

网上有很多关于 Node.js Express 框架文件上传的示例。但大多数人都在使用multer。所有这些都从表单加载文件。

但我的情况有所不同。我的应用程序将从手机中选择图像并上传到服务器(通过使用 Ionic 中的 cordova-file-transfer 插件)。在这种情况下,我根本没有表格。这样就没有req.files了。有什么建议吗?谢谢。

P.S:这是我的服务器中记录我的 http 标头的日志:

{ host: 'localhost:3000',
  'x-requested-with': 'XMLHttpRequest',
  accept: '*/*',
  'content-type': 'multipart/form-data; boundary=+++++org.apache.cordova.formBoundary',
  'content-length': '23394',
  'accept-language': 'en-us',
  'accept-encoding': 'gzip, deflate',
  connection: 'keep-alive',
  'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13C75 (2079040640)' }

我的服务器代码:

  app.post('/', multer({dest:'./uploads/'}).single('upl'),(req,res) => {
    console.dir(req.headers)
    console.dir(req.body)
    res.status(204).end()
  })

显然“upl”在我的例子中没有定义。


如果有人遇到同样的问题,这里是我的完整源代码和解释。

我的项目背景

一个离子应用程序,它使用 cordova-file-transfer 插件将文件从照片库上传到 Node.js Express 服务器。

我在 app.js 中的服务器代码:

var express = require('express')
var multer = require('multer')
var bodyParser = require('body-parser')
var path = require('path')

var app = express()

// settings
app.set('views', path.join(__dirname,'views'))
app.set('view engine','jade')

// middleware
app.use(bodyParser.json())

// route
app.get('/', (req,res) => {
  res.render('index')
})

app.post('/', multer({dest:'./uploads/'}).single('upl'),(req,res) => {
  console.log(req.body)
  console.log(req.file)
  res.status(204).end()
})

// start
var server = app.listen(3000, () => {
  console.log('Started at port ' + server.address().port)
})

我的客户代码upload():

upload() {

var options = new FileUploadOptions()
options.fileKey = "upl";              // this equal to <input type="file" id="upl">
options.fileName = 'test.jpg';
options.mimeType = "image/jpg";
options.chunkedMode = false;
options.params = {'directory' : 'uploads', 'fileName': 'test.jpg'};

var ft = new FileTransfer()
ft.upload(this.thumbnail, encodeURI('http://localhost:3000/'),
  (res) => {
    console.log("Code = " + res.responseCode)
    console.log("Response = " + res.response)
    console.log("Sent = " + res.bytesSent)
  },(error) => {
    alert("An error has occurred: Code = " + error.code);
    console.log("upload error source " + error.source);
    console.log("upload error target " + error.target);
  },options)
}

this.thumbnail 是我的文件路径,例如在我的 ios 中,路径类似于:

文件:///Users/myusername/Library/Developer/CoreSimulator/Devices/81B513B7-AE34-4911-A9C9-57E293957BEC/data/Containers/Data/Application/C9A0BE15-EA4A-4DD8-9E75-BC960ECF50B7/tmp/cdv_photo_016.jpg

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写用于文件上传的 Node.js Express API? 的相关文章

随机推荐

  • 在 TOleContainer 中嵌入多个 MS Word 实例

    这让我很头疼 我正在开发的 delphi 应用程序使用 TOLEContainer 中的 Word 打开一个或多个表单 我遇到的问题是 当使用嵌入的 Word 实例打开多个表单时 一个实例的控件会影响所有其他实例 而第一个实例上的控件不可用
  • CAKE 构建和 NUNIT3 生成空结果文件

    我正在使用 cake build 并尝试将 cake 单元测试结果上传到 AppVeyor 但是当我在本地运行时 Cake Nunit3 生成空结果 我认为这就是导致 AppVeyor 上错误的原因 在下面的块中 生成了 NUnitResu
  • 如何使用 Velocity.js 为翻译属性设置动画?

    我有一个简单的块 应该使用 translateX 向左移动 200px 它将向左移动 位置也向左 我似乎无法使用translateX 或translateY 移动块 Transform 翻译的 CSS 值将起作用 使用翻译的原因是与位置相比
  • 窗口最小化时的 AudioContext 计时问题

    我按照中的说明进行操作本文 http www html5rocks com en tutorials audio scheduling 并创建了一个 Javascript 节拍器 它利用 Web Audio API 并具有audioCont
  • Visual Studio 2010 右键单击​​时崩溃

    我在 Windows 7 中遇到了这个问题 现在使用 Windows 8 1 x64 的格式化后且非常干净的 C 磁盘 我也遇到了这个问题 当我在 Visual Studio 2010 中执行 Visual C 应用程序并右键单击以显示右侧
  • 如何在 OSX 上安装 python-gtk2、python-webkit 和 python-jswebkit

    我已经阅读了许多相关问题 但仍然不清楚如何做到这一点 因为有许多可用的软件组合 并且许多解决方案似乎已经过时 在 OSX 上的虚拟环境中安装以下内容的最佳方法是什么 python gtk2 python webkit python jswe
  • 没有父表标签的 td

    HTML td class tabletd text one td br td class tabletd this is next td td
  • ADK 1.0 设备无法与 Jelly Bean 配合使用,为什么?

    刚刚将久经考验的 ADK 配件连接到 Nexus 7 和 Galaxy Nexus 连接失败 并显示 无法读取设备协议版本 消息 以为主板坏了 用 ICS 连接到 Nexus S 工作得很好 在 Jelly Bean 升级之前也在 Gala
  • 消息:call_user_func_array() 期望参数 1 是有效的回调

    遇到 PHP 错误 严重性 警告 消息 call user func array 期望参数 1 是有效的回调 类 Error 没有方法 index 文件名 core CodeIgniter php 线路号码 532 回溯 文件 var ww
  • 在离子框架中放大时,离子滚动使我的图像变得模糊

    我在 ionic 框架的 ion scroll 标签中加载图片 当我尝试放大时 图片变得模糊 字母也无法辨认 这种情况在我的浏览器和 Android 上都会发生 我的模板的代码
  • 如何自定义android中长按/延迟按钮按下的时间间隔

    我正在制作一个应用程序 它有一个按钮来执行操作 但我想在用户长按按钮时执行该操作 因为 Google 提供了长按持续时间 appx 5 秒 但我想自定义这个持续时间 请帮忙 你可以试试Touch Listener去做这个 Try Handl
  • 用于组合 NUnit 或 MSTest XML 结果的 MSBuild 任务

    我有一组 NUnit XML 结果文件 由 xUnit NET 通过 Xunit Runner MSBuild xunit msbuild 任务的 NUnitXml 参数生成 几乎与如何让 Team Build 显示 xUnit net 测
  • 如何在 woocommerce 中为不同类别存档页面调用不同模板

    我在 woocommerce 中有两个类别 一个是 男性 另一个是 女性 默认 woocommerce 为类别存档页面调用 archive product php 但我想为每个类别存档页面显示不同的布局 这个怎么做 您可以看到 WooCom
  • JS 异步/等待任务队列

    在我的 JS 应用程序中 我使用 async await 功能 我想执行多个 API 调用 并希望它们被一个接一个地调用 换句话说 我想替换这个简单的方法 const addTask async url options gt return
  • 如何使用自动工具设置包含路径

    我正在开发一个 C 项目 该项目使用autoconf automake 我正在努力正确设置包含路径 CPPFLAGS 我读了大约3个小时的文档 但我还没有弄清楚 我不是在寻找黑客 而是在寻找正确的方法来做到这一点 这是我的难题 据我所知 包
  • 使用 Javascript 实现背景翻转平铺

    我有一个背景图像 当前垂直重复并位于页面中央 这里有一些描述图像的 ASCII 艺术 并标记了左右两侧 L R 我希望通过每次沿着垂直边缘翻转图像来在整个浏览器窗口中重复图像 L R R L L R R L
  • 在 Firefox Addon 中获取当前浏览器 url

    我在一个面板中 我想获取当前的浏览器 URL 到目前为止没有任何效果 这是我测试过的 唯一能返回任何东西的东西 我得到类似的东西resource jid0 18z0ptaugyu0arjkaoywztggyzg at jetpack 然后是
  • ASP.NET Core 1.0 中无法访问 System.Messaging/MSMQ

    我一直在尝试使用 MVC 6 和其他一些较新的 Web 开发工具 Angular 2 0 等 并且在设置利用 MSMQ 的网页时遇到了一些问题 作为参考 我使用的是 VS2015 Update 2 我相信它仍然是 RC1 当我第一次尝试弄乱
  • 获取Python JSON来序列化日期时间

    有一些我想使用 JSON 序列化的嵌套对象 问题是某些属性包含datetimes 当我尝试序列化这些 pbject 时 Python 抛出异常 TypeError datetime datetime 2012 6 5 17 49 35 67
  • 如何编写用于文件上传的 Node.js Express API?

    网上有很多关于 Node js Express 框架文件上传的示例 但大多数人都在使用multer 所有这些都从表单加载文件 但我的情况有所不同 我的应用程序将从手机中选择图像并上传到服务器 通过使用 Ionic 中的 cordova fi