使用" vaadin文件上传"(聚合物)通过带有快速

时间:2016-05-31 05:31:48

标签: node.js express file-upload polymer vaadin

我正在尝试使用vaadin文件上传元素上传一个简单文件(请参阅https://vaadin.com/elements/-/element/vaadin-upload

我正在使用nodejs并将multer表达为服务器端的中间件。

nodejs简化代码如下:

var express =   require("express");
var multer  =   require('multer');
var app         =   express();
var storage =   multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './uploads');
  },
  filename: function (req, file, callback) {
    callback(null, file.fieldname + '-' + Date.now());
  }
});
var upload = multer({ storage : storage}).single('userPhoto');

app.get('/',function(req,res){
      res.sendFile(__dirname + "/index.html");
});

app.post('/api/photo',function(req,res){
    upload(req,res,function(err) {
        if(err) {
            return res.end("Error uploading file.");
        }
        res.end("File is uploaded");
    });
});

我在index.html中尝试使用HTML元素,此代码正常工作

<form id        =  "uploadForm"
     enctype   =  "multipart/form-data"
     action    =  "/api/photo"
     method    =  "post"
>
<input type="file" name="userPhoto" />
<input type="submit" value="Upload Image" name="submit">
</form>

但我想使用vaadin upload元素。我写了代码

<link rel="import" href="../bower_components/vaadin-upload/vaadin-upload.html">

<vaadin-upload id="userPhoto" target="/api/photo"></vaadin-upload>

当我使用它时,它不能按预期工作。我能看到vaadin元素。但是我无法上传文件。当我选择文件时,服务器会响应字符串&#39;错误上传文件&#39;。我是聚合物和网络开发的新手。有人可以指出我哪里出错了吗?

1 个答案:

答案 0 :(得分:1)

在后端代码中,您必须将文件参数名称从'userPhoto'更改为'file'

如果是原生HTML表单,它会在name的{​​{1}}属性声明的参数中发送文件。

使用Vaadin Upload元素时,文件的发送方式与HTML表单相同。但是,它们不是提供<input type="file">,而是在名为name的参数中发送。

请注意,您拥有上传的"file"属性。 id="userPhoto"是一个不同的属性,不像id

不幸的是,目前无法轻松自定义上传请求的文件参数名称。我们计划在未来添加更多上传请求自定义功能。