问题标签 [skipper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
785 浏览

javascript - Sails.js 文件上传 - 在上传实际完成之前销毁 req.body 和 .upload() 回调执行

我正在使用 Sails 构建一个网站,其页面包含一个表单。此表单有多个文本输入,以及一个供用户上传图像的文件上传输入。来自所有文本输入的信息都存储在 Postgres 数据库中,并使用.upload()sails 文档中描述的功能上传图像,并将其转换为数据 uri,然后将其存储在同一个 Postgres 数据库中并用于在地点。

文件输入是页面上倒数第三个输入,我注意到发生了两件事:

1)文件输入的两个输入中的文本没有作为 的一部分传递给控制器req.body​​,就像表单输入通常那样。

2) 某些图像的数据库中没有存储数据 uri。

我创建了一个新的基本风帆应用程序,其表单允许您上传图像,并且在这里发生完全相同的事情。

经过测试,我发现小图像可以正常工作,而大图像则不行。我使用的“小”图像为 66kb,而另一张 800kb 的图像产生了与上述相同的效果。

新的sails 应用程序,在.upload()函数的回调中,res.view是另一个页面,仅显示上传的图像。对于 800kb 和更大的图像,当页面被渲染时,它没有显示上传的图像,而是显示了一个损坏的图像。在 chrome 开发控制台中,它为图像链接提供了 404 错误,但如果我在图像 url 的末尾添加一个查询(即让 chrome 认为它是不同的 url,所以重新加载相同的图像),图像显示正常。由此我猜想.upload()在图像实际完成上传之前调用回调,并且当我重新加载图像时它已经完成上传。

我可以在请求标头中看到正在发送文件输入之后的输入,但console.log(req.body)在控制器中执行的操作只会注销表单中文件输入之前的输入。

我使用的是sails v0.11.0,我使用的代码如下:

HTML 表单 (index.ejs)

配置/routes.js

控制器 (ImageController.js)

显示上传图片的页面(uploadedImage.ejs)

谁能解释为什么会发生这种情况并帮助我解决它?

谢谢

0 投票
1 回答
631 浏览

node.js - 在 AWS 上为 Skipper 上传创建公共 URL

我正在使用 Skipper.js 将我的图像上传到 Amazon Web Service S3 但无法使用Skipper.js为上传的文件创建公共URL。我不想使用我想上传到S3并能够创建可公开访问的 url 来下载文件的Skipper-Disk 。我的代码在下面,这就是我所做的一切

0 投票
0 回答
1259 浏览

javascript - Sails.js Skipper 中止文件上传

我正在编写一个基于 Sails-js 的应用程序,用户可以将图像文件上传到服务器。我想在将文件保存到磁盘之前检查文件是否真的是图像文件。

在与船长磁盘适配器苦苦挣扎后,我注意到显然在完成上传之前我无法检查文件属性。如果我检查了文件类型并尝试响应res.json("error, wrong file type")或类似的东西,客户端永远不会得到响应,除非我让上传完成并在此之后才响应。这也意味着我必须在上传后进行所有验证。这尤其令人讨厌,因为我有通过中间件保护端点的 Sails 策略。未完成的上传以某种方式设法阻止甚至应该在控制器之前运行的身份验证中间件。

下面是我最好的尝试,它只是将文件保存在磁盘上,如果出现验证错误,将其删除。很不满意。此外,如果未经身份验证的用户尝试上传文件,它将永远不会响应:

在对 Skipper 的磁盘适配器感到沮丧后,我浏览了它的文档并找到了关于编写我自己的接收器的文档。借助 Stackoverflow中的这些信息和类似问题,我创建了以下代码:

这样我对流有更多的控制,我想我想出了从请求中获取流的基本想法,然后将它管道传输到文件流。在可读事件中,我尝试检查文件的类型。但是,中止流仍然是一个问题。经过一些试验和错误,我设法end()为文件和​​输出流调用函数。如果我正确理解流,他们应该关闭它们。req.file('image).upload在接收器检测到错误的文件类型后,我会立即从我的函数中获得正确的返回值。但是,我仍然可以回复!尝试使用非常大的文件后,看起来像

不断记录新的块,这意味着文件流没有像我预期的那样关闭。

所以最后我的最后一个问题是,如何在 Sails.js/Skipper 中正确中止传入的 http-request 流?

0 投票
1 回答
1281 浏览

sails.js - 如何将字符串/图像 base64 发送到 Sailsjs - 使用 ajax 的船长

目前我正在捕捉相机的图像,这种 Base64 格式,我正在通过 ajax 发送。

0 个文件上传成功!

0 投票
1 回答
1661 浏览

javascript - 如何在上传使用 SailsJS Skipper 之前验证文件类型

正如标题,现在我无法在上传前检查文件类型。我只验证文件上传成功后不允许保存数据。下面是基本代码

我应该怎么做才能获得正确的代码?对不起,我的英语不好!非常感谢!

0 投票
1 回答
2091 浏览

node.js - Sails.js Skipper:如何在上传过程中读取上传的文件流?

我使用的是 0.11 版的 Sails,它与用于文件上传的船长捆绑在一起。我需要上传至少超过 100 MB 的大文件。

现在我不希望在开始进一步处理服务器上的文件之前完成文件上传。我想在上传文件流时读取它。以下是我试图实现相同目标的方法:

但我的日志只显示结束事件,没有捕获数据事件。我阅读了req.file("filename") 将返回文件流流的文档。但是由于我只上传一个文件,如何访问我需要的特定文件流?

0 投票
1 回答
527 浏览

node.js - Sails js:如何检查通过单个参数的 req.file 方法传递的文件数

我在sails js中有一个控制器,负责将图像上传到s3。一切正常,图像上传到 s3 假设只为参数“图像”发送了一个文件(我可以通过 req.file('image') 访问它)。我想知道,如何验证只有一个文件( input type="file" )被发送和上传,而不是多个( input type="file" multiple )文件。

事实:多个文件已成功上传,但我在req.file('image')._files 中看不到多个文件

0 投票
0 回答
617 浏览

file-upload - Sails.js文件上传在多上传形式上传大文件时返回空文件数组

我的 Sails.js 项目中有多部分表单,它提交 2 个不同的文件(第一个音频然后是图像)以及一些文本参数。在大多数情况下,文件很小,一切正常。但是当我尝试更大的音频文件(33MB)时,我在接收器中的图像字段中得到了空文件数组。这是一些代码。

控制器:

基本上在这里我得到以下音频和图像日志:

我尝试了调试,发现在图像字段的情况下,它永远不会到达文件实际写入的prototype.onFile.jsup.writeFile(part);

调试日志还打印​​以下内容:

不知道为什么,但似乎在写入图像文件之前控件已经传递给应用程序。同样,这只发生在较大的音频文件中。有没有办法来解决这个问题?

编辑: 更多调试表明,在receivedFirstFileOfRequest写入图像文件之前调用了侦听器。这是合乎逻辑的,因为它实际上会监听第一个文件上传,但是如何处理下一个文件呢?

编辑: 啊...文件根本不需要很大。一个 29KB 的文件通过,一个 320KB 的文件没有...

0 投票
0 回答
199 浏览

node.js - 取消使用 Sails.js 和 Skipper 保存上传的文件

当我们检测到由于不应该保存文件而导致的某些约束时,是否可以在船长上传功能中取消文件保存?

我有一段这样的代码:

在 saveAs 函数中,我首先将记录保存在数据库中,然后使用从保存的记录返回的 id 等名称保存上传的文件。但是,如果保存到数据库不成功(例如由于验证错误),我该如何取消在磁盘上保存文件并进一步传递该错误?

0 投票
2 回答
1737 浏览

node.js - how to change skipper maxTimeToBuffer attribute

I am using skipper and skipper-azure to upload multiple files at a time, if I upload small number of files lets say 20 to 30 at a time every thing works fine but if I upload more files like 200 or 300 I start receiving the following error for some of the files i.e only for two or three files not all files.

An Upstream timed out before it was plugged into a receiver

In sails>node_modules>skipper>Standalone>Upstream>Upstream.js file there is an attribute maxTimeToBuffer and its default value is 4500 when i change this to 10000 my code works fine I tested it over a 100 times.

My questions are

  • What is the impact of this change ?
  • Is there any place where I can override this configuration instead of changing it main file i don't want this configuration to go away with every update.

Thanking you guys for any help in advance