Heim  >  Artikel  >  Backend-Entwicklung  >  NodeJs rufen die Datei an die Golang-API ab

NodeJs rufen die Datei an die Golang-API ab

WBOY
WBOYnach vorne
2024-02-08 23:00:101217Durchsuche

NodeJs 将文件获取到 Golang API

php-Editor Baicao hat kürzlich eine interessante technische Anwendung entdeckt: die Verwendung von Node.js, um Dateien an die Golang-API zu übertragen. Als leichte JavaScript-Laufumgebung ist Node.js für seine effizienten E/A-Vorgänge und nicht blockierenden Funktionen bekannt. Als leistungsstarke Programmiersprache verfügt Golang über hervorragende Leistungen bei der Bewältigung gleichzeitiger Aufgaben und der Netzwerkkommunikation. Wenn Sie beides kombinieren, können Sie Dateien in Node.js abrufen und zur weiteren Verarbeitung an die Golang-API übergeben, was Entwicklern eine flexiblere und effizientere Lösung bietet. In diesem Artikel stellen wir vor, wie Sie Node.js verwenden, um Dateien an die Golang-API zu übertragen, und untersuchen deren Anwendungsszenarien in tatsächlichen Projekten.

Frageninhalt

Ich versuche, über Node-Fetch in einer Golang-API-Datei mit einer gewissen Struktur zu posten. Ich kann es mit Postman erstellen, aber nicht mit NodeJS

Hallo. Ich bin in einer Sackgasse und habe alles versucht...

Ich muss eine Anfrage an die Golang-API stellen. Ich kann sie in Postman erstellen: Sie sieht so aus: Postboten-Anfrage

Ich muss es in NodeJs wiederholen, aber ich bekomme immer wieder fehlerhafte Anfragen von der API

Das ist mein Code auf 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
})

Der Unterschied zum von Postman generierten Code besteht nur in formdata.append("f2b07a43-f79f-4033-ab2d-bb3176934679", fileInput.files[0], "/file_0.jpg"); und meine machen stattdessen " 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 Gibt einen string oder einen Buffer zurück, der nur den Inhalt von enthält die Datei selbst. Das bedeutet, dass Sie nur den Rohinhalt der Datei an FormData.append() übergeben, was wiederum bedeutet, dass Ihr Aufruf von fetch den resultierenden Schlüssel/Wert behandelt Paare als Für Dateien – dies geschieht nur, wenn ein Wert mit den Typen Blob oder File (MDN) übergeben wird.

Lesen Sie stattdessen den Inhalt der Datei als Array 转换为新的 Blob 对象,然后将 blob 对象和所需文件的名称传递给 FormDataFelder (kurzer Tipp zur Antwort auf diese Frage ):

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

Das obige ist der detaillierte Inhalt vonNodeJs rufen die Datei an die Golang-API ab. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen