如何从formData获取内容?

时间:2014-03-14 12:03:28

标签: javascript html form-data

我已经在formData中创建了一个文件,如下所示:

    var fd = new FormData();
    fd.append('file', file);    

如何从formData中获取内容?像文件名和文件? 这样的事情?:fd.filename()fd.getData()。 还是fd.get('file')来检索文件?

5 个答案:

答案 0 :(得分:2)

你无法获得那样的归档数据。如果要将文件发送到servlet。试试这个

获取您的文件

var files=document.getElementById('fileID').files[0];

现在将您的文件附加到formdata并通过ajax发送;

fd.append('file',files);

注意:表单enctype应该是multipart / formdata

答案 1 :(得分:2)

在您将文件附加到我认为的formData对象后,无法检索文件。

您必须在某处发送formData-object,然后从req-object或类似内容中获取文件。

在我的情况下(angularJS + nodeJS)我从SO的答案(下面的链接)测试了这个:

角:

var fd = new FormData();
fd.append('file', file);
$http({
  method:"POST",
  url:"uploadFile",
  data: fd,
  withCredentials: true,
  headers: {'Content-Type': undefined },
  transformRequest: angular.identity
});

节点(expressJS):

app.post('/uploadFile', function(req,res){
  fs.readFile(req.files.file.path, function(err, data){
    // Do something with the data (which holds the file information)
  });
});

要了解您可以对文件执行的操作,请阅读以下内容: http://nodejs.org/api/fs.html

代码取自: AngularJS: how to implement a simple file upload with multipart form?

答案 2 :(得分:2)

尝试:

 var fd = new FormData();
 fd.append('file', file); 

然后使用:

   var newfile = fd.get('file');
      console.log(newfile.name);       //filename
      console.log(newfile.size);       //filesize

或者对于数组:

 for (var newfile of fd.getAll('file')){
     console.log(newfile.name);
     console.log(newfile.size);
}  

然后您可以将文件追加到另一个FormData:

var newFormData = new FormData();
    newFormData.append('file', newfile);

如果您想从FormData获取所有数据,而不仅仅是文件,请使用FormData.entries():

for (var pair of fd.entries())
    {
     console.log(pair[0]+ ', '+ pair[1]);   //property and value pairs
    }

答案 3 :(得分:0)

你无法获得这样的内容。可用的唯一方法是追加

https://developer.mozilla.org/en-US/docs/Web/API/FormData

答案 4 :(得分:0)

查看these Mozilla articles后,看起来无法从FormData对象中获取数据。您只能使用它们来构建FormData以通过AJAX请求发送。

解决这个问题的一种方法是建立一个常规字典,然后将其转换为FormData:

var myFormData = {
    key1: 300,
    key2: 'hello world'
};

var fd = new FormData();
for (var key in myFormData) {
    console.log(key, myFormData[key]);
    fd.append(key, myFormData[key]);
}

如果您想调试普通的FormData对象,您也可以发送它以便在开发人员工具的网络请求控制台中检查它:

var xhr = new XMLHttpRequest;
xhr.open('POST', '/', true);
xhr.send(fd);
  

以下是 Drag and Drop files into FormData 的概念验证代码,并通过POST上传到服务器。我还制作了一个JS Bin,您可以在其中进行实验,看看FormData对象中的数据是否有用。