Axios: Axios рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдореЗрдВ рдкреНрд░рдкрддреНрд░ рдбреЗрдЯрд╛ рдирд╣реАрдВ рднреЗрдЬрддреЗ рд╣реИрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЬрдире░ 2018  ┬╖  46рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: axios/axios

рдореИрдВ axios рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдкрддреНрд░ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрд░реЛрдо рджреЗрд╡ рдЙрдкрдХрд░рдг рдореЗрдВ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдбрд╛рдХрд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ред
js (newData) => { const data = new FormData(); data.append('name', 'raphael'); data.append('file', { uri: newData.image.path, type: 'image/jpeg', name: 'teste' }); return axios.post(`${constants.development.URL_API}/file`, data, headers: { 'Content-Type': 'multipart/form-data', }, })`

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рдмрдЧ рдЕрднреА рднреА рдирд╡реАрдирддрдо рдЕрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдмрдВрдж рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛?

рд╕рднреА 46 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@corujoraphael рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░, рдХреНрдпрд╛ рдпрд╣ рдЕрдиреБрд░реЛрдз рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛?

@corujoraphael рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рдЪрд▓рддрд╛ рд╣реИред рдЬрд┐рд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЖрдк рдЕрдкрдиреЗ рд╣реЗрдбрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕ рдЧреБрдо рд╣реИ:

(newData) => {
  const data = new FormData();
  data.append('name', 'raphael');
  data.append('file', {
    uri: newData.image.path,
    type: 'image/jpeg',
    name: 'teste'
  });

  return axios.post(
    `${constants.development.URL_API}/file`,
    data, 
    { 
      headers: {
        'Content-Type': 'multipart/form-data',
      }
    },
  )
}

рдЪреВрдВрдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдПрдХреНрд╕рд┐рдпреЛрд╕ рдмрдЧ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдФрд░ рд╕рд╣рд╛рдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ , Gitter рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ рдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВред

рдзрдиреНрдпрд╡рд╛рдж!

@emilyemorehouse , рдореБрдЭреЗ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдлреЙрд░реНрдордбрд╛рдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛

let s = JSON.stringify({ uri: localUri, name: filename, type: type });
let formData = new FormData();
formData.append('ph0t0', s);

axios.post("http://10.0.1.2:8888/uploadphoto", {
        method: "POST",
        headers: {
                'Content-Type': 'multipart/form-data; charset=utf-8; boundary="another cool boundary";'
        },
        body: formData,
}).then((resp) => {
        console.log(resp);
}).catch(err => {
        console.log(err);
});

рдХреБрдЫ рдХреБрдВрдЬреА рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВ рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдореМрдЬреВрдж рд╣реИрдВ

2018/02/20 18:25:31.740 [рдбрдмреНрд▓реНрдпреВ] [photo.go:411] рдЕрдиреБрд░реЛрдзред рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯрдлреЙрд░реНрдо: рд╢реВрдиреНрдп
2018/02/20 18:25:31.740 [рдбрдмреНрд▓реНрдпреВ] [photo.go:412] рдЕрдиреБрд░реЛрдз рдкреНрд░рдкрддреНрд░: рдирдХреНрд╢рд╛[]
2018/02/20 18:25:31.740 [рдбрдмреНрд▓реНрдпреВ] [photo.go:413] рдЕрдиреБрд░реЛрдзред
2018/02/20 18:25:31.740 [рдбрдмреНрд▓реНрдпреВ] [photo.go:410] рдЕрдиреБрд░реЛрдз: &{POST /uploadphoto/dialog/57120e8951c643ab42a8c19f/00000000000000000000001 HTTP/1.1 1 1 рдирдХреНрд╢рд╛[рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░:[рдЖрд╡реЗрджрди/json;charset =utf-8] рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдПрдЬреЗрдВрдЯ:[okhttp/3.6.0] рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ:[рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рдЬреЗрд╕рди, рдЯреЗрдХреНрд╕реНрдЯ/рд╕рд╛рджрд╛, / ] рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ: [419] рдХрдиреЗрдХреНрд╢рди: [рдХреАрдк-рдЬрд┐рдВрджрд╛] рд╕реНрд╡реАрдХрд╛рд░-рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: [gzip] рдХреБрдХреА:[lang=zh-TW; PVsessionID=db9a21d63b2d0ea47b68fa8755bd87e2]] 0xc420e3cb80419 [] рдЭреВрдард╛ 10.0.1.2:8888 рдирдХреНрд╢рд╛ [] рдирдХреНрд╢рд╛ []рдирдХреНрд╢рд╛[] 10.0.1.3:46904 /рдЕрдкрд▓реЛрдбрдлреЛрдЯреЛ/рд╕рдВрд╡рд╛рдж/57120рдИ8951рд╕реА643рдПрдмреА42рдП8рд╕реА19рдПрдл/0000000000000000000000010xc420e3cb40}
2018/02/20 18:25:31.740 [рдИ] [photo.go:425] [рдЕрдкрд▓реЛрдбрдлреЛрдЯреЛ] рддреНрд░реБрдЯрд┐: рдЕрдиреБрд░реЛрдз рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ/рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ

рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдирдХрд╛рд░реА
рдЕрдХреНрд╖: 0.16.2
рдПрдХреНрд╕рдкреЛ: 25.0.0
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛: 16.2.0
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓: 0.52.0

рдпрд╣ рдмрдЧ рдЕрднреА рднреА рдирд╡реАрдирддрдо рдЕрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдмрдВрдж рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛?

рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдмреИрдХ рдЕрдк рдЦреЛрд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИред

@ Ernie6711 рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ - рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдиреЗ рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рде рд╣реА, axios.post рдХреЗ рддрд░реНрдХ рд╣реИрдВ axios.post(url[, data[, config]])

рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

const file ={ uri: localUri, name: filename, type: type};
const formData = new FormData();
formData.append('file', s);

const config = {
        headers: {
                'Content-Type': 'multipart/form-data; charset=utf-8; boundary="another cool boundary";'
        }
};

axios.post("http://10.0.1.2:8888/uploadphoto", formData, config).then((resp) => {
        console.log(resp);
}).catch(err => {
        console.log(err);
});

@emilyemorehouse рдХреГрдкрдпрд╛

POST /myserver HTTP/1.1
Content-Type: multipart/form-data

_parts=USERX%2Cusername&_parts=FILE1%2C%5Bobject%20Object%5D

рдореЗрд░реЗ рдкрд╛рд╕ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд╛рдиреАрдп рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд╣рд░, рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдареАрдХ рд╕реЗ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЪрд░ рдФрд░ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рддрдХ рдореЗрд░реА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред

рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЕрдкрд▓реЛрдб рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рддреЛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдкрддреНрд░ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред

@emilyemorehouse рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдХреЗрд╡рд▓ рдореВрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╡рд┐рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ - рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдмрд╛рд╣рд░ рдереЗ, рдореИрдВ рд╡рд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ :)

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрд╢реА рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдмрд╕ рд╡рд╛рдпрд░рд╢рд╛рд░реНрдХ рдирд┐рд╢рд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ ...

рдореБрдЭреЗ рд╡рд╣реА рдорд┐рд▓рд╛, Axios рджреЗрд╢реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░ рдирд╣реАрдВ рд╣реИ

@duongtranpyco рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ axios рд╣рдЯрд╛ рджрд┐рдП рд╣реИрдВ, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕рд░рд▓ рд╡рд░реНрдЧ рд▓рд┐рдЦрд╛ рд╣реИ, рдЖрдирдВрдж рд▓реЗрдВ!

PS рдпрджрд┐ рдЖрдк рдореБрдЦреНрдп рд░реВрдк рд╕реЗ JSON рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдлреЙрд░реНрдо рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

const request = async ({url, method = 'GET', params, body, responseType = 'json', headers = {}})=>{
    const escape = (data, encode = encodeURIComponent)=>Object.keys(data||{}).reduce((pairs, key)=>{
        for (let value of [].concat(data[key]))
            pairs.push([`${key}`, `${value}`]);
        return pairs;
    }, []).map(pair=>pair.map(encode).join('=')).join('&');

    if (Object.keys(params||{}).length)
        url += '?'+escape(params);
    if (method=='POST' && typeof body=='object')
    {
        if (body instanceof FormData)
            headers['Content-Type'] = 'multipart/form-data';
        else
        {
            body = escape(body);
            headers['Content-Type'] = 'application/x-www-form-urlencoded';
        }
    }
    let {statusCode, request: req} = await new Promise((resolve, reject)=>{
        let xhr = new XMLHttpRequest();
        xhr.open(method, url, true);
        xhr.withCredentials = true;
        xhr.responseType = {json: 'text'}[responseType]||responseType;
        xhr.onload = ()=>resolve({statusCode: xhr.status, request: xhr});
        xhr.onerror = ()=>reject(new TypeError('Network request failed'));
        xhr.ontimeout = ()=>reject(new TypeError('Network request timed out'));
        for (let key in headers)
            xhr.setRequestHeader(key, headers[key]);
        xhr.send(body||null);
    });
    if (statusCode<200 || statusCode>=400)
        throw new Error(`network request failed with ${statusCode}: ${url}`);
    switch(responseType)
    {
        case 'json':
            return JSON.parse(req.responseText);
        case 'text':
            return req.responseText;
        case 'request':
            return req;
    }
    return req.response;
};

request.get = (url, opt = {})=>request({...opt, url, body: null});
request.post = (url, ...args)=>request({...args[1]||{}, url, method: 'POST', body: args[0]});

рд╣рд╛рдп, рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИ?

рджреВрд╕рд░рд╛ @giladnoред рдЪреВрдВрдХрд┐ рдореИрдВ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рд▓рд╛рдиреЗ () рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВред

рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рди рд╣реА рдбреЗрдЯрд╛ рдпрд╛ рддрд░реНрдХреЛрдВ рдХреЛ рд╕рдЦреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдиреЗ рдХреЙрд▓ рд░рд┐рд╕реАрд╡ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рднреЗрдЬрд╛ред

@ Ernie6711 рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рд╣реЗрдбрд░ рджреВрд╖рд┐рдд рд╣реИрдВ рдФрд░ рдЗрд╕реАрд▓рд┐рдП рд╕рд░реНрд╡рд░ рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИред рдореИрдВрдиреЗ рдлрд╝реЗрдЪ() рдХреЗ рд╕рд╛рде рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред

рдореБрдЭреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдореЗрдВ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛ рдереАред
рд╕рдорд╕реНрдпрд╛ рд╣реЗрдбрд░ рдирд╣реАрдВ рд╣реИрдВред
рд╡реЗрдм рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

let formData = new FormData()
formData.append('key', true // bool value)

рд▓реЗрдХрд┐рди рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдорд╛рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

formData.append('key', 'true')

рдЬрдм рдореИрдВ рдПрдХ рдпреВрдЖрд░рдПрд▓ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рдкрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ @giladno рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдореВрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдк рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд▓реЛрдЧ @emilyemorehouse рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ 14 рджрд┐рди рдкрд╣рд▓реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ https://github.com/axios/axios/issues/1618 , рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдиреЗ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реАрдбрдореА рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рдкрд░ рдЕрдХреНрд╖ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рддрд╛рдХрд┐ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рддреЗ..!

рд╣рд╛рдВ, рдореИрдВ рджрд┐рд╢рд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди "рдХреЗрд╡рд▓ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ" рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЕрдХреНрд╕рд░ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдкрд┐рди рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧреЗрдЧрд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреЛрд╕реНрдЯ рд╣реИ рдЬреЛ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

    const formData = new FormData();
    formData.append("data", true);

    const config = {
      headers: {
        "Content-Type": "multipart/form-data; charset=utf-8;"
      }
    };

    axios.post(URL, formData, config).then(
      response => {
        console.log({ response });
      },
      error => {
        console.log({ error });
      }
    );

true рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдкрд░ рдХрдбрд╝реЗ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЕрдЧрд░ рдХреЛрдИ рдРрд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдФрд░ рдЧреМрд░ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

@corujoraphael рдЖрдкрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛?

рдореИрдВрдиреЗ рдЫрд╡рд┐ рд╡рд╕реНрддреБ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЬреИрд╕реЗ "Image.type='image/png" рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХреЛ рднреА рдмрджрд▓ рджрд┐рдпрд╛ "Content-Type":"multipart/form-data" :

        image.type='image/png'
        formData.append("resource", image);
        return axios
          .post('yourBAckendUrl', formData, {
            headers: {
              Authorization: "yourTokenHere",
              "Content-Type": "multipart/form-data"
            }
          })

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рднреА рдЕрд╕рдорд░реНрде рдерд╛, рдореИрдВ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ/рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ рдХреЛ рдПрд╕ 3 (рд╡реАрдбрд┐рдпреЛ) рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдкреНрд░рдХрд╛рд░ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реАред рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ/рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ рд╣реЗрдбрд░ рдкреБрдЯ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:

      const data = new FormData();
      data.append('video', {
          uri: 'file:///<path_to_video_on_iphone.mov',
          type: 'video/quicktime',
          name: 'video.mov',
      });
      response = yield call(() => {
        return api.put(url, data, {
          headers: {
              'Content-Type': 'multipart/form-data',
          },
          transformRequest: [
            (data, headers) => {
                delete headers.common.Authorization;
                return data;
            }
          ]
        });
      });

рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рднреНрд░реВрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ :D

var data = new FormData();  
data.append('my_photo', {  
  uri: filePath, // your file path string
  name: 'my_photo.jpg',
  type: 'image/jpg'
}

fetch(path, {  
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'multipart/form-data'
  },
  method: 'POST',
  body: data
});

Axios рд╕рдВрд╕реНрдХрд░рдг 0.18.0 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
axios рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╣реЗрдбрд░ Content-Type рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ post, put рдЖрджрд┐ рдкрд░ рдХреЛрдИ рдмреЙрдбреА рдирд╣реАрдВ рд╣реИ рддреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ FormData рдмрдирд╛рддреЗ рд╕рдордп рд╢рд░реАрд░ рдЦрд╛рд▓реА рд░рд╣рддрд╛ рд╣реИ ..
рдпрд╣ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:

const sendFormData = images => {
   // images is an array of base64 images (strings)
    const formData = new FormData();
    images.forEach((img, i) => {
        formData.append('file', img);
        formData.append('name', `${type}-${i + 1}`);
    });

    config.headers = {
        .'Content-Type': 'multipart/form-data'
     };

     return axios.post(`http://someurl.com/api/upload-images`, formData, config)
            .then(response => {
               // handle success
            })
            .catch(err => {
                // handle err
     });
}

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг 0.55.3
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдЦрд╛рд▓реА рд╣реИ рдФрд░ Content-Type рд╢реАрд░реНрд╖рд▓реЗрдЦ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдЬрдм рдореИрдВ рдбреАрдмрдЧ рдореЗрдВ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореЗрд░рд╛ рд╢рд░реАрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ

screen shot 2018-10-26 at 11 12 10 am

рдФрд░ рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдХреЛрдб

        const formData = new FormData();
        formData.append('photo', {
          uri: response.uri.replace('file://', ''),
          mineType: 'image/jpeg',
          fileType: 'image/jpg',
          type: 'image/jpg',
          name: 'test.jpg'
        });

        console.log('form data', formData);

         Axios({
           method: 'post',
           url: 'https://dev-host.luxstay.net/api/rooms/10740/photos',
           data: formData,
           headers: {
             Authorization: token,
             'Content-Type': 'multipart/form-data'
           }
         });

рдЕрдкрдбреЗрдЯ : рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдХреНрдпреЛрдВрдХрд┐ рдРрдк рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдерд╛ред рдЬрдм рдореИрдВ рдбрд┐рдмрдЧ рдореЛрдб рдмрдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

axios рдХреЗ xhr рдПрдбреЙрдкреНрдЯрд░ рдореЗрдВ рдПрдХ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ
if (utils.isFormData(requestData)) { delete requestHeaders['Content-Type']; // Let the browser set it }
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдореЗрдВ рдпрд╣ рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЖрдк рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓рд╛рдЗрди рдЖрдЙрдЯ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдореЗрдВ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред

Axios рд╕рдВрд╕реНрдХрд░рдг 0.18.0 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
axios рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╣реЗрдбрд░ Content-Type рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ post, put рдЖрджрд┐ рдкрд░ рдХреЛрдИ рдмреЙрдбреА рдирд╣реАрдВ рд╣реИ рддреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ FormData рдмрдирд╛рддреЗ рд╕рдордп рд╢рд░реАрд░ рдЦрд╛рд▓реА рд░рд╣рддрд╛ рд╣реИ ..
рдпрд╣ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:

const sendFormData = images => {
   // images is an array of base64 images (strings)
    const formData = new FormData();
    images.forEach((img, i) => {
        formData.append('file', img);
        formData.append('name', `${type}-${i + 1}`);
    });

    config.headers = {
        .'Content-Type': 'multipart/form-data'
     };

     return axios.post(`http://someurl.com/api/upload-images`, formData, config)
            .then(response => {
               // handle success
            })
            .catch(err => {
                // handle err
     });
}

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг 0.55.3
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдЦрд╛рд▓реА рд╣реИ рдФрд░ Content-Type рд╢реАрд░реНрд╖рд▓реЗрдЦ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

screen shot 2018-10-26 at 11 12 10 am

рддреЛ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП? рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╕реНрддреБ рд╡рд╕реНрддреБ рднреА рд╣реИред

@tkserver рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЖрдк toString() рдХрд░рддреЗ рд╣реИрдВред

const a = {
  name: 'dasdasd'
}
console.log(a.toString());

@tkserver рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЖрдк toString() рдХрд░рддреЗ рд╣реИрдВред

const a = {
  name: 'dasdasd'
}
console.log(a.toString());

рд╢рд╛рдпрдж рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред рд╣реЗрдбрд░ рджреЗрдЦрддреЗ рд╕рдордп рдЕрдиреБрд░реЛрдз рдкреЗрд▓реЛрдб [рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ] рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

@tkserver рдпрджрд┐ рдЖрдкрдХреЗ рдбреАрдмрдЧрд░ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рд░реАрдХреНрд╖рдг рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдХреЗ рдлреЙрд░реНрдордбрд╛рдЯрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЦрд╛рд▓реА рдлреЙрд░реНрдордбрд╛рдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рд░реАрдХреНрд╖рдг рдореЗрдВ [рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ] рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред
рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рд░реАрдХреНрд╖рдг рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓рддреА рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж рдЕрдорди725, рдорд┐рдиреНрд╣рдлрдВрдЧ210 рдФрд░ рд╕рднреАред рдЬрдм рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдЕрдкрд▓реЛрдб рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдИрдУрдПрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рдареАрдХ рд╣реЛ рдЧрдИ рд╣реИред

рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рдерд╛ рдХрд┐ рдореИрдВ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ рдРрдк рдХреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдореЗрдВ рдХреЛрдб рдХреА рдпрд╣ рдкрдВрдХреНрддрд┐ рдереА:

GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;

рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдФрд░ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

// IMPORTANT: this will cause FormData requests to fail.
// GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;

рдореИрдВрдиреЗ рдЕрднреА рдпрд╣ рдкрд╛рдпрд╛: https://stackoverflow.com/a/47630754/387912 , рдХреНрдпрд╛ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ?

XMLHttpRequest

рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрд░реЛрдз рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рдареАрдХ рд╕реЗ рдЕрдкрд▓реЛрдб рд╣реЛ рдЬрд╛рдП? рдореБрдЭреЗ рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд░рд╣рддреА рд╣реИ:

Error: Network Error
    at createError (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:168963:17)
    at XMLHttpRequest.handleError (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:168871:16)
    at XMLHttpRequest.dispatchEvent (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:28708:27)
    at XMLHttpRequest.setReadyState (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:28461:20)
    at XMLHttpRequest.__didCompleteResponse (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:28288:16)
    at blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:28398:47
    at RCTDeviceEventEmitter.emit (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:3291:37)
    at MessageQueue.__callFunction (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:2588:44)
    at blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:2345:17
    at MessageQueue.__guard (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:2542:13)

рдЕрджреНрдпрддрди: рдЗрд╕реЗ рдЕрднреА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

formData.append('picture', {
          uri: data.uri,
          name: fname,
          type: 'image/' + ext

        });

рдЕрдЧрд░ рд▓реЛрдЧ рдЕрднреА рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ
GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;
рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдирд┐рдкреЗрдЯ, рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
GLOBAL.FormData = GLOBAL.originalFormData || GLOBAL.FormData
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред

рдореИрдВрдиреЗ рдЫрд╡рд┐ рд╡рд╕реНрддреБ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЬреИрд╕реЗ "Image.type='image/png" рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХреЛ рднреА рдмрджрд▓ рджрд┐рдпрд╛ "Content-Type":"multipart/form-data" :

        image.type='image/png'
        formData.append("resource", image);
        return axios
          .post('yourBAckendUrl', formData, {
            headers: {
              Authorization: "yourTokenHere",
              "Content-Type": "multipart/form-data"
            }
          })

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЖрдИрдУрдПрд╕ рд╕рд┐рдореНрдпреВрдиреЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рддрд╕реНрд╡реАрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рд▓реЗрдХрд┐рди рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдирд╣реАрдВред

рдЫрд╡рд┐ рдкреНрд░рдХрд╛рд░ рдХреЛ 'рдЫрд╡рд┐/рдЬреЗрдкреАрдИрдЬреА' рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред

const formData = new FormData();
formData.append('file', {
  uri: pictureUri,
  type: 'image/jpeg',
  name: 'profile-picture'
})

рдореИрдВрдиреЗ рдЫрд╡рд┐ рд╡рд╕реНрддреБ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЬреИрд╕реЗ "Image.type='image/png" рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХреЛ рднреА рдмрджрд▓ рджрд┐рдпрд╛ "Content-Type":"multipart/form-data" :

        image.type='image/png'
        formData.append("resource", image);
        return axios
          .post('yourBAckendUrl', formData, {
            headers: {
              Authorization: "yourTokenHere",
              "Content-Type": "multipart/form-data"
            }
          })

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЖрдИрдУрдПрд╕ рд╕рд┐рдореНрдпреВрдиреЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рддрд╕реНрд╡реАрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рд▓реЗрдХрд┐рди рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдирд╣реАрдВред

рдЫрд╡рд┐ рдкреНрд░рдХрд╛рд░ рдХреЛ 'рдЫрд╡рд┐/рдЬреЗрдкреАрдИрдЬреА' рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред

const formData = new FormData();
formData.append('file', {
  uri: pictureUri,
  type: 'image/jpeg',
  name: 'profile-picture'
})

рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рдХрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рдордЧреНрд░реА рднреЗрдЬреА рдЬрд╛рдПрдЧреА, рддреЛ multipart/form-data ред рдЕрдм рдЗрд╕реЗ рдкрдврд╝рдирд╛ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдореАрдбрд┐рдпрд╛ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдШрдВрдЯрд╛ рд▓рдЧрд╛ред

    data.append("image", {
      name: "some_name", // also, won't work without this. A name is required
      height: image.height,
      width: image.width,
      type: "multipart/form-data", // <-- this part here
      uri:
        Platform.OS === "android" ? image.uri : image.uri.replace("file:/", "")
    });

рдирдорд╕реНрддреЗ, рдореИрдВ Vue.Js рдореЗрдВ Axios рдЕрдкрд▓реЛрдб рдлрд╝рд╛рдЗрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдПрдЪрдЯреАрдПрдордПрд▓ рдореЗрдВ
<input type="file" id="file" ref="file" multiple @change="assignFiles"/>

рдЬреЗрдПрд╕рдУ рдореЗрдВ

`рдЕрд╕рд╛рдЗрдирдлрд╛рдЗрд▓реНрд╕ (рдИ) {

      let uploadedFiles = this.$refs.file.files;
      for( var i = 0; i < uploadedFiles.length; i++ ) { 
        this.form.AttachmentDocs.push(uploadedFiles[i]);           
      }
      console.log(this.form.AttachmentDocs);
 },`

рдЗрд╕рд▓рд┐рдП, рдкреЛрд╕реНрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп, рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред

`рдЖрдЧреЗ рдмрдврд╝реЗрдВ рд╕рд╣реЗрдЬреЗрдВ (рдИ) {

      e.preventDefault();
      this.$v.$touch();
      if(this.$v.$invalid) {
        return;
      }
    this.showLoading(this.loaderId,true);
      this.postDatas.append('form',JSON.stringify(this.form));
      for( var i = 0; i < this.form.AttachmentDocs.length; i++ ){ 
        let attachment = this.form.AttachmentDocs[i];
        this.postDatas.append('files['+i+']',attachment,attachment.name);           
      }

}`

рддреЛ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВрдиреЗ рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рд╣реЗрдбрд░ рдХреА рдЬрд╛рдБрдЪ рдХреА, рд╡рд╣рд╛рдБ рдпрд╣ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ

рдлрд╝рд╛рдЗрд▓реЗрдВ [0]: (рдмрд╛рдЗрдирд░реА)
рдлрд╝рд╛рдЗрд▓реЗрдВ [1]: (рдмрд╛рдЗрдирд░реА)
рдлрд╝рд╛рдЗрд▓реЗрдВ [2]: (рдмрд╛рдЗрдирд░реА)
рдлрд╝рд╛рдЗрд▓реЗрдВ [3]: (рдмрд╛рдЗрдирд░реА)

рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдкрдХреНрд╖ рдореЗрдВ рдореИрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдЗрд╕рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

this.postDatas.append('files['+i+']',attachment,attachment.name);  

рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ files['+' + i + '+']

рдореБрдЭреЗ рдПрдкреАрдЖрдИ рд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдиреЛрдб рдЬреЗ рдПрд╕ рдореЗрдВ req.body рдЦрд╛рд▓реА рдерд╛ред 'рдПрдХреНрд╕рдкреНрд░реЗрд╕-рджреБрд░реНрдЬреЗрдп' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред https://www.npmjs.com/package/express-formidable

рдЗрд╕рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

this.postDatas.append('files['+i+']',attachment,attachment.name);  

рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ files['+' + i + '+']

Sry + рд╕рдВрдпреЛрдЬрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╛рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ '+' рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдпрд╣ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ[+0+]

рдореБрдЭреЗ рдПрдкреАрдЖрдИ рд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдиреЛрдб рдЬреЗ рдПрд╕ рдореЗрдВ req.body рдЦрд╛рд▓реА рдерд╛ред 'рдПрдХреНрд╕рдкреНрд░реЗрд╕-рджреБрд░реНрдЬреЗрдп' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред https://www.npmjs.com/package/express-formidable

рдХреНрдпрд╛ рдЖрдкрдиреЗ app.use(express.json({ extended: false })); ?

рдЗрд╕рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

this.postDatas.append('files['+i+']',attachment,attachment.name);  

рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ files['+' + i + '+']

Sry + рд╕рдВрдпреЛрдЬрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╛рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ '+' рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдпрд╣ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ[+0+]

рдЖрдкрдХрд╛ рд╡рд░реНрддрдорд╛рди рдХреЛрдб рд╣рдореЗрд╢рд╛ рдЖрдкрдХреЗ рд▓реВрдк рдХреЗ рд▓рд┐рдП files[+i+] рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред рдпрд╣ files[+0+], files[+1+], files[+2+], etc рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд╕рд╛рде рд╣реА, files[+0+] рдХрднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдкрдХреЛ files[0], files[1], files[2]... ? рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ files['+0+'] , рд▓реЗрдХрд┐рди, рдлрд┐рд░ рд╕реЗ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореБрдЭреЗ рдПрдкреАрдЖрдИ рд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдиреЛрдб рдЬреЗ рдПрд╕ рдореЗрдВ req.body рдЦрд╛рд▓реА рдерд╛ред 'рдПрдХреНрд╕рдкреНрд░реЗрд╕-рджреБрд░реНрдЬреЗрдп' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред https://www.npmjs.com/package/express-formidable

рдХреНрдпрд╛ рдЖрдкрдиреЗ app.use(express.json({ extended: false })); ?
рдирд╣реАрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреБрд░реНрдЬреЗрдп рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдореБрджреНрджрд╛ рд╣реИред рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдЕрдиреБрд░реЛрдзрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЬрд╛ рд░рд╣реА рд╣реИред рдЕрдиреБрд░реЛрдз рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

@duongtranpyco рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ axios рд╣рдЯрд╛ рджрд┐рдП рд╣реИрдВ, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕рд░рд▓ рд╡рд░реНрдЧ рд▓рд┐рдЦрд╛ рд╣реИ, рдЖрдирдВрдж рд▓реЗрдВ!

PS рдпрджрд┐ рдЖрдк рдореБрдЦреНрдп рд░реВрдк рд╕реЗ JSON рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдлреЙрд░реНрдо рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

const request = async ({url, method = 'GET', params, body, responseType = 'json', headers = {}})=>{
    const escape = (data, encode = encodeURIComponent)=>Object.keys(data||{}).reduce((pairs, key)=>{
        for (let value of [].concat(data[key]))
            pairs.push([`${key}`, `${value}`]);
        return pairs;
    }, []).map(pair=>pair.map(encode).join('=')).join('&');

    if (Object.keys(params||{}).length)
        url += '?'+escape(params);
    if (method=='POST' && typeof body=='object')
    {
        if (body instanceof FormData)
            headers['Content-Type'] = 'multipart/form-data';
        else
        {
            body = escape(body);
            headers['Content-Type'] = 'application/x-www-form-urlencoded';
        }
    }
    let {statusCode, request: req} = await new Promise((resolve, reject)=>{
        let xhr = new XMLHttpRequest();
        xhr.open(method, url, true);
        xhr.withCredentials = true;
        xhr.responseType = {json: 'text'}[responseType]||responseType;
        xhr.onload = ()=>resolve({statusCode: xhr.status, request: xhr});
        xhr.onerror = ()=>reject(new TypeError('Network request failed'));
        xhr.ontimeout = ()=>reject(new TypeError('Network request timed out'));
        for (let key in headers)
            xhr.setRequestHeader(key, headers[key]);
        xhr.send(body||null);
    });
    if (statusCode<200 || statusCode>=400)
        throw new Error(`network request failed with ${statusCode}: ${url}`);
    switch(responseType)
    {
        case 'json':
            return JSON.parse(req.responseText);
        case 'text':
            return req.responseText;
        case 'request':
            return req;
    }
    return req.response;
};

request.get = (url, opt = {})=>request({...opt, url, body: null});
request.post = (url, ...args)=>request({...args[1]||{}, url, method: 'POST', body: args[0]});

рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдПрдХ рд╕рд╡рд╛рд▓, рдХреНрдпрд╛ рдпрд╣ рд▓рд╛рдЗрди рдЬрд░реВрд░реА рд╣реИ,
рдХреЗ рд▓рд┐рдП ([].concat(data[key]) рдХрд╛ рдорд╛рди рджреЗрдВ)? рдЗрд╕реЗ рд╕рд░рд▓рддрд╛ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ,
рдЬреЛрдбрд╝реЗ.рдкреБрд╢ ([ ${key} , ${data[key]} ]);

рдЕрдЧрд░ рд▓реЛрдЧ рдЕрднреА рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ
GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;
рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдирд┐рдкреЗрдЯ, рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
GLOBAL.FormData = GLOBAL.originalFormData || GLOBAL.FormData
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред

рдпрд╣ рдХрд╣рд╛рдБ рд╣реИ?

рдореБрдЭреЗ рднреА рд╕рдорд╕реНрдпрд╛ рдереАред рдпрд╣ android рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкрде рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред
рдХреЙрдиреНрд╕ рдкрде = utils.isAndroid ()?
рдФрд░ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

    const formData = new FormData();
    const path = utils.isAndroid() ? `file://${filePath}` : filePath;
    formData.append('Voice', {
      uri: path,
      name: 'test',
      type: 'audio/wav',
    });

    formData.append('Content-Type', 'audio/wav');
     const headers =  {
        'Content-Type': 'multipart/form-data',
      };
    return this._sendRequest(url, 'POST', formData, headers);
 data.append('file', {
    uri: newData.image.path,
    type: 'image/jpeg',
    name: 'teste'

рдЬреИрд╕реЗ рдирд╛рдо рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ: name:'teste.jpeg' рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЖрдкрдХреЛ рдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк рджреЗрдирд╛ рд╣реЛрдЧрд╛ рдЕрдиреНрдпрдерд╛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд╛рдо рд╕реЗ рддрдп рдХрд┐рдпрд╛: 'example.jpeg'

рдХрдИ рджрд┐рдиреЛрдВ рддрдХ рдПрдХреНрд╕рд┐рдпреЛрд╕ рдХреЗ рд╕рд╛рде рд╡реАрдбрд┐рдпреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдмрд╕ рд╣рд╛рд░ рдорд╛рди рд▓реЗрддрд╛ рд╣реВрдВред RNFetchBlob рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Android рд╕реЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЗрд╕ рдЦрдВрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ

рдЖрд░рдПрди-рдлрд╝реЗрдЪ-рдмреНрд▓реЙрдм

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jdpagley picture jdpagley  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

9tor picture 9tor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ildella picture ildella  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

emaincourt picture emaincourt  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

c0debreaker picture c0debreaker  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ