使用多部分表单数据上传文件时我缺少什么?

时间:2016-06-17 13:13:37

标签: node.js

嗨,无论出于什么原因我不能使用包裹,例如multer将文件上传到节点服务器。所以我在网上找到了例子,如果只是在表单上传文件,它工作正常。 现在我想发送另一个字段"密码"在提交期间与文件一起,只是不能使它成为一项工作。

我知道那里有很多模块,现在只想让这个例子起作用。

<form style="height: 100%;padding-bottom:63px;">
    <p>
        <input type="file" class="FirmwareFile"
               name="myUpload" file-model="upload.newFwFile">
    </p>

    <p>
        <input type="password" name="password" id="password"
               placeholder="Password" 
               ng-model="upload.controllerPassword"
               class="formInput">
    </p>
</form>

httpSvc.uploadToUrl(myFile, myPd, myServerIPAddress, myRoute) {...}

factory.uploadToUrl = function (fwFile, pd, myServerIp, myRoute) {
    var fd = new FormData();
    //fd.append('passwd', pd); // cannot pass password to server side ?
    fd.append('file', fwFile); // only this works

    var deferred = $q.defer();
    var completeUrl = ......

    $http.post(completeUrl, fd, {
        transformRequest: angular.identity,
        headers: {'Content-Type': undefined}
    }).success(function (data) {
        deferred.resolve(data);
    }).error(function () {
        deferred.reject();
    });

    return deferred.promise;
}

在服务器端,请在哪里提取密码信息?

var UploadImage = function(req, res, callback){
    var destFile = fs.createWriteStream(uploadDest + "mytest");
    var fileSize = req.headers['content-length'];
    req.pipe(destFile); //why not sth. like req.body.file.pipe() ?
    ...
};

1 个答案:

答案 0 :(得分:1)

您的表单没有

<form enctype="multipart/form-data" action="..." method="..."> 
  ... 
</form>

最好使用node-formidable。该示例直接开箱即用。您可能还想查看已经创建的angularJS特定表单上载指令。重新发明轮子毫无意义。

干杯