标签: form-data

如何在没有浏览器的情况下在 node.js 中使用 FormData?

我想在没有浏览器的 nodejs 中发出 post 请求,因为它是后端代码。

const formdata = new FormData()
formdata.append('chartfile', file);
Run Code Online (Sandbox Code Playgroud)

但是上面的代码给了我错误为FormData not defined. 我正在使用 ES6。

任何人,谁能让我知道如何在 nodejs 中使用 FormData?

javascript forms multipartform-data form-data node.js

23
推荐指数
6
解决办法
3万
查看次数

通过MockMVC测试表格帖子

我正在编写测试来验证我可以在我们的API上发布通用表单.

我还添加了一些调试,但我注意到实际表单发布的数据; (邮差/ AngularJS或w/e)不同于做mockMVC测试,如:

MvcResult response = mockMvc
            .perform(post("/some/super/secret/url") //
                    .param("someparam1", "somevalue") //
                    .param("someparam2", "somevalue") //                
                    .contentType(MediaType.APPLICATION_FORM_URLENCODED) //
                    .accept(MediaType.APPLICATION_JSON)) //
            .andExpect(status().isOk()) //
            .andReturn();
Run Code Online (Sandbox Code Playgroud)

配置与生产中运行的配置完全相同,等等.但是当我的拦截器记录内容时,在实际测试(而不是mockMVC)中,内容的格式为"someparam1 = somevalue&etc = encore"

当我打印mockMVC内容时,我实际上似乎没有内容,但请求中有Params,我认为它们像GET参数一样被添加.

有谁知道如何正确测试这个?我遇到了这个问题,因为看起来我们的表单帖子似乎没有被Spring解析,即使我们已经将FormHttpMessageConverter添加到servlet上下文中.

spring form-data

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

使用multipart/form-data比JSON + Base64更好?

我有一台服务器,我需要将文件和一些字段从客户端上传到服务器.我目前一直在使用标准的multipart/form-data.

然而,我发现使用multipart/form-data并不理想.我的服务器上的对象可能嵌套在其中的其他对象,因此表示为嵌入其他JSON对象的JSON对象.

我希望客户端能够以REST-ful方式使用JSON表示开始发出POST/PUT请求,就像它对服务器的GET请求所期望的那样.这样我就不必将可能嵌套在JSON对象中的几个层的字段展平,以便使用multipart/form-data.

问题是,JSON不代表二进制数据.Multipart/form-data似乎没有办法表示嵌套在其他字段值中的字段.但它确实有更好的文件上传处理.

我对如何设计它感到茫然.我应该让客户端上传带有base64编码的字段的JSON,并获得25%的命中率吗?或者我应该在Multipart/form-data请求中将JSON对象表示为某种"json"变量,并将二进制文件作为另一个变量上载?

base64 json http multipart form-data

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

IE8/9中的FormData

我已经实现了这个脚本用于上传带有ajax的文件,它在浏览器以外的其他浏览器中工作得很完美,我注意到IE9不支持formData,更少,IE中的formData有什么替代品,我想用干净的javascript

    function doObjUploadExplorer(url, lnk_id, file, progress, success, content, frm, div_dlg, start_func){
    var file_input = null,
      frm_data = new FormData(),
      req;

    try {
        //firefox, chrome, safari etc
        req = new XMLHttpRequest();
    }

    catch (e) {
        // Internet Explorer Browsers
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }


if (document.getElementById(file)) {
    file_input = document.getElementById(file);

    for (var i = 0; i < file_input.files.length; ++i) {
        frm_data.append(file, file_input.files[i]);
    }
}

req.upload.addEventListener('progress', function(e) {  //Event called while upload is in progress
    if (progress !== undefined
            && e.lengthComputable) { …
Run Code Online (Sandbox Code Playgroud)

javascript xmlhttprequest form-data activexobject

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

仅使用表单数据进行改造2

我正在尝试使用Retrofit 2发出POST请求.请求类型form-data 不是 application/x-www-form-urlencoded.

我只发布数据而不是请求中的文件,响应采用JSON格式.

我试过了@FormUrlEncoded, @Multipart但是没有用.

我试过以下请求

1.第一次尝试

@FormUrlEncoded
@POST("XXXX")
Call<PlanResponse> getPlanName(@Field(Constants.ACTION_ID) String actionId, @Field(Constants.OFFER_CODE) String offerCode);
Run Code Online (Sandbox Code Playgroud)

2.第二次尝试

@Headers({"Content-Type: multipart/form-data","Content-Type: text/plain"})
@FormUrlEncoded
@POST("XXXX")
Call<PlanResponse> getPlans(@Body @FieldMap(encoded = false) Map<String, String> data);
Run Code Online (Sandbox Code Playgroud)

3.第三次尝试

@Headers("Content-Type: multipart/form-data")
@Multipart
@POST("XXXX")
Call<PlanResponse> myPlans(@Part(Constants.ACTION_ID) String actionId, @Part(Constants.OFFER_CODE) String offerCode);
Run Code Online (Sandbox Code Playgroud)

我只是将身体变为空.它正在与POSTMAN合作.

我也搜索一下form-data,并application/x-www-form-urlencoded发现,如果数据是二进制的,然后使用form-data,如果数据是ASCII然后使用application/x-www-form-urlencoded

我正在尝试查找改造不支持表单数据吗?

POSTMAN请求

Cache-Control: no-cache
Postman-Token: XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX
Content-Type: multipart/form-data; boundary=----    WebKitFormBoundaryXXXXXXXXXXXX


 ----WebKitFormBoundaryXXXXXXXXXXXX
Content-Disposition: form-data; name="actionId"

1000
 ----WebKitFormBoundaryXXXXXXXXXXXX
Content-Disposition: form-data; name="offerCode"

MYCODE …
Run Code Online (Sandbox Code Playgroud)

android form-data retrofit2

19
推荐指数
4
解决办法
3万
查看次数

使用jQuery.ajax提交文件会产生TypeError

我试图使用jQuery的ajax方法从表单提交文件:

var ofile=document.getElementById('image').files[0];
var formdata = new FormData();
formdata.append("image",ofile);

$.ajax({
    url:'elements/save_elements',
    data:formdata,
    type:'POST'
});
Run Code Online (Sandbox Code Playgroud)

这导致错误TypeError: 'append' called on an object that does not implement interface FormData.

是什么导致这个错误?它不会发生在实际的formdata.append,但在jQuery内部.

javascript api jquery form-data

18
推荐指数
2
解决办法
3万
查看次数

通过ajax发送FormData对象和一个附加参数

我设法发送一个FormData对象,如下所示:

var formData = new FormData();
formData.append('file', this.files[0]);
$.ajax({
   url: urlUploadProductsFile,
   type: 'POST',
   data: formData,
   cache: false,
   contentType: false,
   processData: false
}, 'json');
Run Code Online (Sandbox Code Playgroud)

现在我想要做的是添加一个额外CustomerId的发送到服务器.以下内容不起作用:

var formData = new FormData();
formData.append('file', this.files[0]);
$.ajax({
   url: urlUploadProductsFile,
   type: 'POST',
   data: { "file": formData, "CustomerId": 2 },
   cache: false,
   contentType: false,
   processData: false
}, 'json');
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下变化:

data: { "file": formData, "CustomerId": 2 }, processData: true

data: JSON.stringify({ "file": formData, "CustomerId": 2 })

data: { "file": JSON.stringify(formData), "CustomerId": 2 }

data: { file: …

ajax jquery json form-data

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

如何在flutter中使用表单数据制作http帖子?

我正在尝试执行 http post 请求,我需要将正文指定为form-data,因为服务器不会将请求视为原始请求。

这就是我正在做的:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  postTest() async {
    final uri = 'https://na57.salesforce.com/services/oauth2/token';
    var requestBody = {
      'grant_type':'password',
      'client_id':'3MVG9dZJodJWITSviqdj3EnW.LrZ81MbuGBqgIxxxdD6u7Mru2NOEs8bHFoFyNw_nVKPhlF2EzDbNYI0rphQL',
      'client_secret':'42E131F37E4E05313646E1ED1D3788D76192EBECA7486D15BDDB8408B9726B42',
      'username':'example@mail.com.us',
      'password':'ABC1234563Af88jesKxPLVirJRW8wXvj3D'
    };

    http.Response response = await http.post(
        uri,
        body: json.encode(requestBody),
    );

    print(response.body);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Container(
        child: Center(
          child: RaisedButton(
            child: Text('Press Here'),
            onPressed: …
Run Code Online (Sandbox Code Playgroud)

http form-data dart flutter

17
推荐指数
3
解决办法
5万
查看次数

在multipart/form-data上载的各个部分设置内容长度标题

我想使用类型的post请求上传多个文件,multipart/form-data并且我需要知道服务器端的文件大小(内容长度).

为了构造POST请求,javascript我使用一个FormData对象并将File对象附加到它上面.这样可以正常工作,但除了Content-type标题之外,每个部分只添加一个Content-Disposition标题,但没有Content-length标题,尽管可以从各个File对象获得此信息.

有没有办法实现在发送请求时Content-lengthFormData对象的每个部分设置标头?

下面是我使用的代码,包括我对问题的解决方法.它实际上用于angular-js发送请求,但我认为这与问题无关.

var form = new window.FormData();

form.append('additional-field-1', new Blob(['some plain text'], {type : 'text/plain'}));

for (var file in fileList) {
    var fileObj = fileList[file];
    var count = 1 + parseInt(file, null);
    form.append('file-size-' + count, new Blob([fileObj.size], {type : 'text/plain'}));
    form.append('file-' + count, fileObj);
}

$http.post(url, form, {
    transformRequest: angular.identity,
    headers: {'Content-Type': undefined}
}).success(.....
Run Code Online (Sandbox Code Playgroud)

javascript multipartform-data multipart form-data angularjs

16
推荐指数
1
解决办法
1999
查看次数

为什么在单击浏览器后退按钮时有时会清除HTML表单

我相信每个人都知道这种行为.您在网上填写表格,然后提交.提交后,您认识到您填写了一些错误的数据.所以,你点击浏览器后退按钮.然后,有时表单仍然包含您输入的数据(您希望在这种情况下),有时不会.

当它被清除时,我找不到任何连接.

我在internet/stackoverflow上找到的一些答案:

  • 在https连接上,表单始终被清除
  • 当使用带有会话的动态网站时,表格总是被清除

但他们两个都是绝对错误的.我看过网站(比如我自己的网站)确实在浏览器恢复之后保留了表单数据,并且正在使用https 正在使用会话.

所以请:有人可以解释一下浏览器是如何处理这些东西的吗?

顺便说一句:我的任务是确保清除表单数据.

html browser forms form-data back-button

14
推荐指数
1
解决办法
9423
查看次数