标签: formidable

使用Node.js,Async和Formidable进行错误处理

在下面的代码片段中,我想验证第一个异步方法中的字段.

如果它们无效,我想立即向用户返回错误.

我怎么做?

var form = new formidable.IncomingForm();

async1.series([
    function (callback) {
        form.parse(req);

        form.on('field', function (name, val) {
            // Get the fields
        });

        form.on('fileBegin', function (name, file) {
            if (file.name !== "") {
                file.path = __dirname + '/upload/' + file.name;
            }
        });
        callback();
    },
    function (callback) {
        form.on('file', function (name, file) {
            try {
                // Do something with the file using the fields retrieved from first async method
            }
            catch (err) {
                logger.info(err);
            }
        });


        callback();
    }
], function (err) …
Run Code Online (Sandbox Code Playgroud)

javascript node.js formidable async.js

14
推荐指数
2
解决办法
2559
查看次数

如何重命名由Formidable解析的文件?

如何在Node中命名由Formidable解析的文件?目前我的文件保存为'7c9d182a9892bb7588b49ea9d364efd0.pdf',我更喜欢原始文件名.

有人知道怎么做吗?

node.js formidable

13
推荐指数
2
解决办法
1万
查看次数

使用formidable和(knox或aws-sdk)将文件流上传到Node.js上的S3

我正在尝试使用aws-sdkknox将通过表单提交的文件直接上传到Amazon S3存储桶.表格处理是强大的.

我的问题是:如何使用aws-sdk(或knox)使用这些库的最新功能处理流来正确使用强大的功能?

我知道这个主题已经在这里被提出了不同的风格,即:

但是,我认为答案有点过时和/或偏离主题(即CORS支持,我现在不希望出于各种原因使用)和/或最重要的是,没有提及最新的功能来自aws-sdk(参见:https://github.com/aws/aws-sdk-js/issues/13#issuecomment-16085442)或knox(特别是putStream()或其readableStream.pipe(req)变体,均解释在文档中).

经过几个小时的挣扎,我得出结论,我需要一些帮助(免责声明:我是一个流媒体新手).

HTML表单:

<form action="/uploadPicture" method="post" enctype="multipart/form-data">
  <input name="picture" type="file" accept="image/*">
  <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

Express bodyParser中间件以这种方式配置:

app.use(express.bodyParser({defer: true}))
Run Code Online (Sandbox Code Playgroud)

POST请求处理程序:

uploadPicture = (req, res, next) ->
  form = new formidable.IncomingForm()
  form.parse(req)

  form.onPart = (part) ->
    if not part.filename
      # Let formidable handle all non-file parts (fields)
      form.handlePart(part)
    else
      handlePart(part, form.bytesExpected)

  handlePart = (part, fileSize) ->
    # aws-sdk version
    params …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 node.js formidable knox-amazon-s3-client

13
推荐指数
2
解决办法
1万
查看次数

不推荐使用os.tmpDir() - node和formidable

我使用节点版本7.2.0和强大的版本1.0.17进行文件上传.更新到节点版本7.2.0后,我现在在上传文件时收到以下错误:

(node:3376)DeprecationWarning:不推荐使用os.tmpDir().请改用os.tmpdir().

我不使用form.uploadDir的deafult,而是使用一些自定义路径.

我该如何解决这个错误?非常感谢.

node.js formidable

11
推荐指数
1
解决办法
2万
查看次数

nodejs和强大的标头错误

以下是:Node Beginner Book

我无法调试此问题或在线查找解决方案.Node.js的新手,希望有人能提供解决方案

错误:更新了控制台日志信息2012年2月11日星期六上午7:27:17

Request for/ received!
About to route a request for /
Request handler 'start' was called.
Request for/favicon.ico received!
About to route a request for /favicon.ico
No request handler found for /favicon.ico
Request for/favicon.ico received!
About to route a request for /favicon.ico
No request handler found for /favicon.ico
Request for/upload received!
About to route a request for /upload
Request handler 'upload' was called.
about to parse
{ output: [],
  outputEncodings: [],
  writable: true,
  _last: false, …
Run Code Online (Sandbox Code Playgroud)

node.js formidable

10
推荐指数
1
解决办法
6219
查看次数

从node.js报告上载进度

我正在编写一个小的node.js应用程序,它从HTML表单接收多部分POST并将传入的数据传递给Amazon S3.的强大的模块提供了多部分解析,露出各部分作为节点.该诺克斯模块处理PUT到S3.

var form = new formidable.IncomingForm()
 ,  s3   = knox.createClient(conf);

form.onPart = function(part) {
    var put = s3.putStream(part, filename, headers, handleResponse);
    put.on('progress', handleProgress);
};

form.parse(req);
Run Code Online (Sandbox Code Playgroud)

我通过socket.io向浏览器客户端报告上传进度,但是很难获得这些数字以反映节点上传到s3的真实进度.

当浏览器到节点上传瞬间发生时,就像节点进程在本地网络上运行时一样,进度指示器立即达到100%.如果文件很大,即300MB,则进度指示器缓慢上升,但仍然比我们的上游带宽允许的速度快.在达到100%进度后,客户端然后挂起,大概等待s3上传完成.

我知道在内部putStream使用Node的stream.pipe方法,但我不明白这是如何工作的细节.我的假设是节点尽可能快地吞噬输入数据,将其丢入内存.如果写入流可以足够快地获取数据,则很少有数据一次保存在存储器中,因为它可以被写入和丢弃.如果写入流速度很慢,就像在这里一样,我们可能必须将所有传入数据保留在内存中,直到可以写入为止.由于我们正在侦听data读取流上的事件以便取得进展,因此我们最终报告上传速度比实际速度快.

我对这个问题的理解是否接近标记?我该怎么办呢?我需要坐下来脏write,drainpause

amazon-s3 node.js formidable knox-amazon-s3-client

9
推荐指数
1
解决办法
3287
查看次数

GraphicsMagick进程导致空文件

我这样做

gm(jpgName).setFormat('jpg')
    .resize(160,158)
    .compress('JPEG')
.write(fs.createWriteStream(jpgName),function(err){
    if(err){
        console.log(err,jpgName);
    res.send(400);
    }else{
        console.log('file formated to jpg' + jpgName);
Run Code Online (Sandbox Code Playgroud)

我明白了

{ [Error: Command failed: gm convert: Empty input file (/home/ubuntu/node/uploads/icon.jpg). ] code: 1, signal: null }
Run Code Online (Sandbox Code Playgroud)

如果我在此处写入的第一行之前停止代码,然后查看该文件,则它具有文件长度.如果我让这个过程发生(错误输出)然后查看文件,那么它的大小为0字节.

我也试过这个:

fs.stat(jpgName, function (err, stats) {
    console.log('file size:',stats.size);
    gm(jpgName).setFormat('jpg')
        .resize(160,158)
        .compress('JPEG')
        .write(fs.createWriteStream(jpgName),function(err){
            if(err){
                console.log('console.log error writing jpg file',err,jpgName);
                    fs.unlink(jpgName);
                        callback(400);
                        return;
                    }else{//...
Run Code Online (Sandbox Code Playgroud)

而且我得到了一个文件大小,所以我知道在开始这个过程之前它并不是空的.

编辑:我现在开始这个过程,form.on('end')所以我可以确定整个上传过程已经完成.

整个功能:

function formatProfileImage(req,form,file,callback){
    console.log('formatting profile image');
    var ext = file.name.split('.')[1].toLowerCase();
    var name = encodeURIComponent(file.name.split('.')[0].toLowerCase());
    var smallName = form.uploadDir+"/"+"small_"+name+".jpg";
    var jpgName = …
Run Code Online (Sandbox Code Playgroud)

javascript node.js graphicsmagick formidable

9
推荐指数
1
解决办法
2195
查看次数

如何使html页面自动适合移动设备屏幕?

我在一个html页面上使用了一个强大的表格<iframe>,但我希望它能在移动设备上全屏显示.到目前为止,我使用以下代码:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <style>
  @import url(http://fonts.googleapis.com/css?family=Londrina+Sketch);

  body {
  background-color: #f3eedd;
  width: 750px;
  overflow:scroll;
    overflow-x:hidden;
  }

h2 {
    font-size: 20px;
    color: #c13e18;
    margin: 10px 30px 10px 30px;
}

</style>
</head>
<body>
<div id="header">
<h2>Book Supheroes Unite</h2>
</div>
<div id="form">
<iframe src="http://challenge-the-box.com/wp-admin/admin-ajax.php?action=frm_forms_preview&form=sbyrt02
" frameborder="0" scrolling="no" style="width:280px;height:535px;"></iframe></div>
</html>
Run Code Online (Sandbox Code Playgroud)

我相信它与视口有关?但是,我对此并不完全确定!

html forms iframe mobile formidable

8
推荐指数
1
解决办法
5万
查看次数

模拟multipart/form-data Express.JS请求对象

我想对Express中间件功能进行单元测试,而后者又使用node-formidable来处理多部分文件上传.

这是一个人为的例子:

function doUpload(req, res, next) {
    const form = new formidable.IncomingForm();
    form.uploadDir = this.mediaDir;
    form.keepExtensions = true;
    form.type = 'multipart';
    form.multiples = true;

    form.parse(req, 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}));
    });
}
Run Code Online (Sandbox Code Playgroud)

在使用Chrome和正在运行的Express应用程序进行测试后,此代码适用于我.

我希望我的测试代码看起来像我在模拟请求对象,但我无法弄清楚如何使用表单数据模拟请求对象.强大的回调没有触发:

it(‘handles uploads’, (done) => {
    const mockReq = http.request({
        host: 'example.org',
    });
    mockReq.url = ‘/upload’;

    const res = jasmine.createSpyObj('response', [ 'json', 'send', 'status', 'render', 'header', ‘redirect’, ‘end’, ‘write;]);
    const next = jasmine.createSpy('next');

    //*how to emulate a …
Run Code Online (Sandbox Code Playgroud)

unit-testing node.js express jasmine formidable

8
推荐指数
1
解决办法
1455
查看次数

在节点js中获取八位字节流而不是图像

在我的前端,我使用angular6,我有这种形式,您可以通过删除文件div或单击div打开文件选择器来选择图像.

表格是

<form [formGroup]="imageUpload" (ngSubmit)="imageUploadSubmitted($event.target)"  > 
  <div id="imageDrop" (click)='imageInput.click()' (drop)="drop($event)" (dragover)="allowDrop($event)" #imageDrop></div> 
  <input type="file"  (change)='imageChange($event)' #imageInput id="imageInput" name = 'imageInput'  accept=".png, .jpg, .jpeg, .gif" formControlName="imageInput"  required  > 
  <button type="submit" >Submit</button>  
</form>
Run Code Online (Sandbox Code Playgroud)

这是打字稿

  selectedFile:File=null;

  allowDrop(e) {
    e.preventDefault();
  }

  drop(e) {    
    e.preventDefault();  
    this.imageUpload.controls.imageInput.reset();  
    this.selectedFile = e.dataTransfer.files[0];
    let input = this.imageUpload.controls.imageInput as any;        
    input.value = e.dataTransfer.files[0];     
  }

  imageChange(e){            
    this.selectedFile = e.target.files[0];
  }
Run Code Online (Sandbox Code Playgroud)

因此,在删除图像时,从事件中获取它并将其放入文件输入中.提交表单后,将表单数据发送到服务进行发布.console.log显示File对象(__proto__ : File无论你从文件选择器中选择了一个图像,或者一个下降的)div.

  imageUploadSubmitted(form){
    console.log('imageInput value - ', this.imageUpload.controls.imageInput.value);           
    this.mapcmsService.uploadImage(form).subscribe((data) …
Run Code Online (Sandbox Code Playgroud)

file-upload node.js formidable angular

8
推荐指数
1
解决办法
616
查看次数