Maison  >  Article  >  développement back-end  >  NodeJs récupère le fichier vers l'API Golang

NodeJs récupère le fichier vers l'API Golang

WBOY
WBOYavant
2024-02-08 23:00:101184parcourir

NodeJs 将文件获取到 Golang API

L'éditeur php Baicao a récemment découvert une application technique intéressante : utiliser Node.js pour transférer des fichiers vers l'API Golang. En tant qu'environnement d'exécution JavaScript léger, Node.js est célèbre pour ses opérations d'E/S efficaces et ses fonctionnalités non bloquantes. En tant que langage de programmation hautes performances, Golang présente d'excellentes performances dans la gestion des tâches simultanées et de la communication réseau. En combinant les deux, vous pouvez obtenir des fichiers dans Node.js et transmettre les fichiers à l'API Golang pour un traitement ultérieur, offrant ainsi aux développeurs une solution plus flexible et plus efficace. Dans cet article, nous présenterons comment utiliser Node.js pour transférer des fichiers vers l'API Golang et explorerons ses scénarios d'application dans des projets réels.

Contenu de la question

J'essaie de publier via node-fetch dans un fichier API golang avec une certaine structure, je peux le faire depuis postman mais pas depuis NodeJS

Bonjour. Je suis dans une impasse et j'ai tout essayé...

Je dois faire une requête à golang api, je peux la créer dans Postman : elle ressemble à ceci : Demande du facteur

Je dois le répéter dans NodeJs mais je continue de recevoir de mauvaises requêtes de l'API

Voici mon code sur Node

let formData = new FormData()
formData.append('postUUID', postUuid)
json.data.uploadIds.map((upl, index) => {
    let file = data.files.find(el => el == upl.filename)
    formData.append(upl.uuid, fs.readFileSync(file));
})
let headers = new Headers()
headers.append('Authorization', 'Bearer '+token)
headers.append("Accept", "application/json");
fetch(API+'/posts/uploadMediaFiles', {
    method: 'POST',
    headers,
    body: formData
})

La différence avec le code généré par Postman se trouve uniquement dans formdata.append("f2b07a43-f79f-4033-ab2d-bb3176934679", fileInput.files[0], "/file_0.jpg"); et le mien fait à la place " rel="nofollow noreferrer">fs.readFileSync()formdata.append("f2b07a43-f79f-4033-ab2d-bb3176934679", fileInput.files[0], "/file_0.jpg"); 和我做而不是 formData.append (upl.uuid, fs.readFileSync(文件));

解决方法

fs.readFileSync() 返回 string Buffer仅包含文件本身的内容。这意味着您仅将文件的原始内容传递给 FormData.append(),这又意味着您对 fetch 的调用会将生成的键/值对视为文件 - 这仅在使用 BlobFile 类型传递 value Renvoie une string ou un Buffer qui contient uniquement le contenu de le fichier lui-même. Cela signifie que vous transmettez uniquement le contenu brut du fichier à FormData.append(), ce qui signifie que votre appel à fetch traitera la clé/valeur résultante. paires comme pour les fichiers - cela ne se produit que lors du passage d'une valeur en utilisant les types Blob ou File (MDN).

Lisez plutôt le contenu du fichier sous forme de Array 转换为新的 Blob 对象,然后将 blob 对象和所需文件的名称传递给 FormData champs (astuce rapide sur la réponse à cette question ) :

formData.append(upl.uuid, new Blob([fs.readFileSync(file)]), upl.filename);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer