NodeJs upload files based on Express

Claude Code CLI安装配置指南:AI编程助手实战教程 AI编程助手是当前软件开发领域的重要技术趋势,它基于大语言模型原理,能够理解代码上下文并执行编程任务。这种工具的技术价值在于显著提升开发效率,减少重复性编码工作。在工程实践中,AI编程助手适用于项目初始化、代码重构、Bug修复等常见开发场景。Claude Code CLI作为终端集成的AI编程工具,支持自然语言指令操作,具备深度代码理解能力。通过npm安装配置后,开发者可以在命令行环境中使用Claude模型进行智能编码,实现代码库感知和任务执行功能。本指南详细介绍了环境准备、安装步骤和API密钥配置等关键环 阅读详情

更多内容参考系列文章: nodejs系列提纲

作为本blog的需求,上传图片始终是要支持的。但是呢,久久未动,以为麻烦,尽管诸多文章显示非常简单。昨天晚上终于下定决心解决它。果然简单异常,但是在本地测试成功之后发现部署到CloudFoundry却不能正常运行,原来还有小细节没有注意到。下面一一道来。

1. 准备工作

首先你要知道怎么用NodeJs下面的Web框架Express,这是一个比较简单、使用广泛的框架,入门很简单。本ramonblog就是用它搭建的。Express的View是用jade语法的,这个你也得懂一点。是不是学的东西有点多了?不用太理解,开始的时候都是抄的,抄得多也就懂了。

然后呢,我们就用可以准备我们的upload.jade了,这里仅仅是包含了一个简单的表单,里面一个file input元素和一个submit元素。

div
    form(method="post", enctype="multipart/form-data")
        input(type="file", name="displayImage")
        input(type="submit", name="submit", value="Submit")

2. 让它工作吧

之所以Express底下上传文件非常简单,是因为Express的bodyParser中间件会在解析request请求的时候,将“multipart/form-data”里面的file input对应的内容自动处理保存到默认的/tmp文件夹下面,而你可以通过req.files来获取所有的属性,其内容大概如下:

{ displayImage:
    { 
    size: 18925,
    path: '/tmp/47662e4853761e4b30b6c3a329980dac',
    name: '2.jpg',
    type: 'image/jpeg',
    lastModifiedDate: Wed, 18 Jul 2012 17:01:44 GMT,
    _writeStream:
        { path: '/tmp/47662e4853761e4b30b6c3a329980dac',
        fd: 36,
        writable: false,
        flags: 'w',
        encoding: 'binary',
        mode: 438,
        bytesWritten: 18925,
        busy: false,
        _queue: [],
    drainable: true },
        length: [Getter],
        filename: [Getter],
        mime: [Getter] 
        }
    }
}

注意其中的displayImage是我们在form中定义的file的name,req.files.displayImage的path表示在服务器端的临时地址,name表示上传的原始文件名称,type则是文件类型了。提交之后的处理则如下:

var fs = require('fs');
var path = require('path');

function(req, res) {

    //你可能需要修改相关的newPath到你自己的地址
    var filePath = req.files.displayImage.path;
        var extName = path.extname(req.files.displayImage.name);
        var imageUrl = "/upload/" + path.basename(filePath) + extName;
        var newPath = __dirname + "/../public" + imageUrl;

    //把图片从临时文件夹复制到目的文件夹,当然最好删除临时文件
        fs.readFile(filePath, function (err, data) {
            if (err) {
                res.send(err);
                return;
            }

            fs.writeFile(newPath, data, function (err) {
                if (!err) {
                    res.send({uploaded: true});
                } else {
                    res.send(err);
                }
            });
        });
}

注意,你可能需要自己修改newPath到你自己正确的地址。其次,如果想直接访问你上传的图片,需要把图片放置在Express指定的public文件夹下面,这样可以直接通过链接访问。

3. CloudFoundry上不能工作

很显然在CF的服务器上你不能写文件到 /tmp下面去。其实解决办法也很简单,就是把临时文件夹指定到你自己的应用下面去。譬如指定为应用下面的tmp文件夹,需要做的就是在你的app.js中增加如下的i配置:

app.use(express.bodyParser({
        uploadDir: __dirname + '/tmp'
}));

这里要求的app.js就在应用的根目录下,这样__dirname就会是你的应用根目录。之后你就可以在CF上执行上传图片了。

更具体的代码可以参考本blog在github上面的代码:

https://github.com/flyingsky/node-blog/blob/master/views/demos/upload.jade 
https://github.com/flyingsky/node-blog/blob/master/routes/demo.js

node-red百科全书 ... 阅读详情

相关推荐

Amazon RDS MySql入门指南

原文: http://ramonblog.cloudfoundry.com/blog/4fd831002de195990a000001 AWS提供的RDS(Relational Database Service)是AWS的数据库解决方案之一,它是基于关系数据库的,支持MySql,Oracle和MS SqlServer。这里只简单介绍以下Mysql的应用,更多信息请查看RDS官方文

秋风吹渭水,落叶满长安 7301

NodeJS File Upload ⑩

Node.js是一个javascript运行环境。它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与```PHP、Java、Python、.NET、Ruby等后端语言平起平坐。Nodejs是基于V8引擎,V8是Google发布的开源JavaScript引擎,本身就是用于Chrome浏览器的JS解释,但是Node之父Ryan Dahl把这V8搬到了服务器上,用于做服务器的软件。

m0_61490399的博客 446

手把手教你用C#和LibUsbDotNet实现USB设备通信(含完整代码示例)

本文详细介绍了如何使用C#和LibUsbDotNet库实现USB设备通信,包括设备识别、连接建立、同步/异步数据读写等核心操作。通过完整的代码示例,开发者可以快速掌握USB通信的关键技术,适用于工业自动化、医疗设备等多种场景。重点讲解了数据读写优化和错误处理技巧,帮助提升通信效率和可靠性。

a3b4c5的博客 705

如何在Node.js和Express中上传文件

如何在Node.js和Express中上传文件安装创建Express服务器上传单个文件express-fileupload中间件如何工作?上传多个文件测试应用程序1. 单文件2. 多个文件文件大小限制结论相关博客链接 大量的移动应用程序和网站允许用户上传个人资料图片和其他文件。 因此,在使用Node.js和Express构建REST API时,通常需要处理文件上传。 在本教程中,我们将讨论如何使用Node.js和Express后端处理单个和多个文件上传,以及如何将上传的文件保存在服务器上。 安装 首先,让我

ccf19881030的专栏 1516

零代码实战:基于Coze平台打造测试用例生成AI助手

本文详细介绍了如何利用Coze平台零代码打造测试用例生成AI助手,通过智能体和工作流配置,实现需求文档自动解析与结构化测试用例生成。该方案显著提升测试效率,特别适合敏捷开发中频繁变更的需求场景,帮助测试工程师快速应对挑战。

weixin_42526015的博客 209

用workbuddy自定义Skill:手把手搭建AI炒股分析助手

AI Agent正成为个人投资研究的重要工具,而Skill作为行为规范,能让AI输出保持稳定与专业。在AI Agent应用中,很多人分不清Skill与Agent的区别:Agent负责目标拆解与执行,Skill则固化分析流程与输出模板。借助本地工作台workbuddy,用户可自定义Skill,实现从市场环境检查到财务排雷的五段式分析。通过调低温度参数、设定数据验证规则,该方案能有效避免大模型凭空编造数据,帮助个人投资者快速完成基本面体检、资金面观察与风险清单生成。本文基于一套可直接套用的配置与一个月实测,展示

weixin_29038537的博客 522

nodejs:express file upload demo

这个小demo,是基于nodejs express框架实现文件上传 客服端代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> </head> <body> 用户:<input type="text" id="user"&g...

qq_39579242的博客 522

为什么一个“时间片”能折腾 Linux 十年?

时间片扩展不是抢占调度器的控制权,也不是提升优先级。在“非常短暂、非常确定”的用户态临界区内,避免线程被不必要地抢占。用户态自旋锁(user-space spinlock)无系统调用的极短临界区高并发、低延迟的数据结构操作RSEQ(Restartable Sequences)保护区间一旦线程在临界区被抢占,系统整体性能反而下降。线程 A 拿着一个用户态锁线程 B 被调度上来,开始自旋等这个锁但 A 因为时间片用完,被调度器切走CPU 白白空转,所有线程都在浪费时间。

网络技术联盟站 254

【课程设计】NodeJS人才招聘系统-计算机毕业设计源码68224

1.首页:普通用户可以查看网站的最新动态和重要信息。此页面通常包含快速链接到其他关键部分,如招聘信息、留言反馈和个人中心。 2.通知公告:在此板块,普通用户能够获取最新的官方通知与公告信息,了解网站更新内容或重要事项的变化情况。 3.招聘资讯: 用户可浏览最新的招聘资讯,对感兴趣的文章进行点赞、收藏,并留下自己的看法或疑问。此外,还可以直接申请感兴趣的职位,系统会记录用户的申请历史以便日后参考。 4.留言反馈:此功能允许用户向网站管理员或其他相关部门提交建议、疑问或反馈,促进平台的改进和服务质量的提升。 5

Biye_Design的博客 1699

纯C语言实现的Luhn算法(信用卡校验位):详解与示例

在本文中,我们详细介绍了如何使用纯C语言实现Luhn算法,并提供了一些示例代码。用于检查任意长度的数字字符串的有效性,用于计算给定数字字符串的校验位字符。我们还提供了一个简单的“main”C程序,用于在命令行上接受一个或多个数字字符串,并计算它们的校验位字符。通过阅读本文和理解示例代码,我们希望读者能够更好地理解Luhn算法的工作原理,并能够在自己的项目中应用这种算法。

qq_38334677的博客 1221

一文吃透:从零到一开发一套 ABAP RAP 应用的完整路径

ABAP RAP开发实战摘要 本文系统介绍了ABAP RESTful Application Programming Model (RAP)在企业级应用开发中的实施路径。文章以出差申请业务场景为例,详细拆解了RAP开发的六步主线流程: 数据库表设计:规范主键、审计字段设计 CDS数据建模:通过视图定义业务对象实体及关联 行为定义与实现:使用BDEF声明事务规则,Behavior Pool类实现业务逻辑 业务对象投影:裁剪服务接口视图 服务定义与绑定:按OData协议暴露服务 UI集成测试:支持Fiori E

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 508

nodejs系列之七——nodejs与mongoDB

原文: http://ramonblog.cloudfoundry.com/blog/4fd4536715d8f0d91e000002 参考其它内容请看本blog中的nodejs系列提纲 更多关于MongoDB的NodeJS驱动内容请参考MongoDB NodeJS Driver 简介 No-SQL的一篇比较详细的中文介绍来自于我自然的博客。而Mongo

秋风吹渭水,落叶满长安 3375

《多模态融合改进》目录一览 | 专栏介绍 :全网 第一份 完整的多模态改进教程,提供《多模态模型改进完整项目包》-开箱即用

在大家订阅专栏后,便可获得多模态模型改进完整项目包-开箱即用,方便简单

Limiiiing的博客 1万+

ExtJS Component分析

很多JS开发人员可能都会熟悉JQuery,这是一个非常流行成熟的、免费的、开源JS框架,但是使用过ExtJS的人就少多了。近半年都是用ExtJS,然后大概看了一下JQuery,有了自己的一些新的体会。可以在稍后的博客中分享一下个人对二者的看法。在这里我们仍然侧重于讲解ExtJS,尤其是它比JQuery强大的地方——Component体系。 所有的JS框架似乎起码要包括如下几部分:跨浏览器

秋风吹渭水,落叶满长安 3036

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

可笑的技术名词OPOA(One Page One Application)

原文来自: http://ramonblog.cloudfoundry.com/blog/4ffc59354e1ef7b729000001 无聊查看了一下猎头发的职位列表,发现一知名电商在杭州招聘一个年薪40w+的前端工程师,这个待遇还是渴望的。再看列出的要求里面包含一个OPOA(One Page One Application),没有见过,但是我猜得到应该是指RIA(Ri

秋风吹渭水,落叶满长安 2981

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

16×16的免费图标SILK

<!--google_ad_client = "pub-1992382271196226";/* 728x90, 创建于 08-3-9 */google_ad_slot = "1653402536";google_ad_width = 728;google_ad_height = 90;//-->今天费了半天劲才找到一些好的16×16图标,尤其恼火的是注

秋风吹渭水,落叶满长安 2643

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

CoffeeScript快速入门

CoffeeScript快速入门 CoffeeScript是最近比较流行的一个小的编程语言,它有自己的语法(受Python和Ruby影响比较多,个人觉得更象Ruby),其编译器将其编译输出javascript。至于生成的javascript则可以在浏览器运行也可以在服务器端运行(NodeJS)。例如最简单的helloWorld函数(你可以点击这个链接进入CoffeeS

秋风吹渭水,落叶满长安 2244

nodejs系列之八——nodejs与cloudfoundry

原文来自: http://ramonblog.cloudfoundry.com/blog/4fd44b4415d8f0d91e000001 参考其它内容请看本blog中的nodejs系列提纲 简介 CloudFoundry是VMVare提供的一个开源的PaaS(Platform as a Service)云计算平台。其实这种平台即服务的云计算平台并不算新,但是作为开源的

秋风吹渭水,落叶满长安 1628

html form中的button引起的问题

Form中包含一个button如 提交成功! 然后在点击button的时候调用jquery.ajax方法。这本来是一个很简单的问题,显然就是ajax调用正常工作。但是问题在于ajax调用总是失败。在ajax的回调中注册了fail方法,如下: fail(function(jqxhr, status){           console.dir(jqxhr);        

秋风吹渭水,落叶满长安 1621

nodejs与cloudfoundry之二:tunnel to mongodb

更多内容参考系列文章: nodejs系列提纲 如果你使用CloudFoundry(简称CF)这样一个PaaS做为你的NodeJs项目的部署环境,的确可以省事,起码不用自己安装nodejs和相关的service,而其部署方式也比AWS似乎来得更加容易。至少我的经历是这样的。ASW的Elastic Beanstalk老半天都不能通过Eclipse的插件同步到服务器,最后只能打包成war包,然后通

秋风吹渭水,落叶满长安 1502

如何调试NodeJS

查看全文:http://ramonblog.cloudfoundry.com/blog/5002d26f4e1ef7b729000002 nodejs系列提纲 我终于要不能忍受优快云这个垃圾网站的blog了,于是乎我决定借着学习nodejs的机会自己搭建一个blog,并且将其部署到cloudfoundry上。于是乎我将陆续完成下面的系列文章。所以文章里面的代码都是这个

秋风吹渭水,落叶满长安 1406

Tomcat 7 JDBC Connection Pool

原文:http://ramonblog.cloudfoundry.com/blog/4fd34be35e8e781871000001 commons-dbcp Before introduce tomcat 7 jdbc connection pool, we have a basic and simple introduction aboutcommons-dbcp. To use

秋风吹渭水,落叶满长安 1396

ExtJS4 Store分析

Store在ExtJS中的分量相当重,从server端获取数据,前台控件展现数据,都离不开它。所以它实际上相当于一个数据访问层,连接后台以及前台数据展示控件。要想理解必须要仔细阅读ExtJS的文档以及源代码。说实话我不喜欢这种Store的封装,有时候显得太复杂。其中最麻烦的一点就是我的server返回的数据必须跟前台的需要的数据格式完全一致,但是很多时候后台返回的数据格式并不是完全满足前台展示需求

秋风吹渭水,落叶满长安 1326

mysqladministrator 启动出错

<!-- google_ad_client = "pub-1992382271196226";/* 728x90, 创建于 08-3-9 */google_ad_slot = "1653402536";google_ad_width = 728;google_ad_height = 90;// --><!-- google_ad

秋风吹渭水,落叶满长安 1273
上一篇: nodejs与cloudfoundry之二:tunnel to mongodb
下一篇: NSDate和NSString之间的相互转化
llmlx
博客等级 码龄23年 15粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值