ReadFile in Base64-Nodejs

Lesezeit: 3 Minuten

Benutzer-Avatar
brunocascio

Ich versuche, ein in Base64 codiertes Bild von der Clientseite zu lesen. Wie liest man mit nodejs?

Mein Code:

// add to buffer base64 image
var encondedImage = new Buffer(image.name, 'base64');

fs.readFile(encondedImage, "base64", function(err, buffer){
    if ( err ) {
        console.log('In read file')
        console.log(err)
    } else {
        // check err
        lwip.open(buffer, 'jpg', function(err, image){
            console.log('in open')
            if ( err ) console.log(err)

            if ( image ) console.log(image)
            // check 'err'. use 'image'.
            // image.resize(...), etc.
        });
    }
})

Aber ich habe diesen Fehler:

In read file
[Error: Path must be a string without null bytes.]

  • fs.readFile nimmt einen String als erstes Argument. Du versuchst, es zu bestehen a Buffer.

    – kbr

    3. März 2015 um 14:59 Uhr

Benutzer-Avatar
Mike Martin

Der neueste und beste Weg, dies zu tun:

Node unterstützt Datei- und Pufferoperationen mit der base64 Codierung:

const fs = require('fs');
const contents = fs.readFileSync('/path/to/file.jpg', {encoding: 'base64'});

Oder mit dem neuen verspricht API:

const fs = require('fs').promises;
const contents = await fs.readFile('/path/to/file.jpg', {encoding: 'base64'});

  • fs.readFileSync('/path/to/file.jpg', {encoding: 'base64'}) dekodiert die Binärdatei nicht … es ist äquivalent zu fs.readFileSync('/path/to/file.jpg', 'utf8') Wir übergeben lediglich ein Codierungsargument, um eine Zeichenfolge anstelle eines Puffers zu erhalten

    – Ray Foss

    16. März um 16:57 Uhr

Benutzer-Avatar
Sjoerd

Ich denke, das folgende Beispiel zeigt, was Sie brauchen: Ich habe den Link entfernt, weil er defekt war.

Die Essenz des Artikels ist dieser Codeteil:

var fs = require('fs');

// function to encode file data to base64 encoded string
function base64_encode(file) {
    // read binary data
    var bitmap = fs.readFileSync(file);
    // convert binary data to base64 encoded string
    return new Buffer(bitmap).toString('base64');
}

// function to create file from base64 encoded string
function base64_decode(base64str, file) {
    // create buffer object from base64 encoded string, it is important to tell the constructor that the string is base64 encoded
    var bitmap = new Buffer(base64str, 'base64');
    // write buffer to file
    fs.writeFileSync(file, bitmap);
    console.log('******** File created from base64 encoded string ********');
}

// convert image to base64 encoded string
var base64str = base64_encode('kitten.jpg');
console.log(base64str);
// convert base64 string back to image 
base64_decode(base64str, 'copy.jpg');

  • Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier einzufügen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verlinkte Seite ändert.

    – Alexis König

    10. März 2015 um 8:04 Uhr

  • Danke für Ihre Erklärung. Jetzt verstehe ich, warum ich die Ablehnungen bekomme.

    – Sjoerd

    10. März 2015 um 8:06 Uhr

  • Wenn das Ziel darin besteht, eine base64-codierte Daten-URI Die Lösung greift etwas zu kurz. Die tatsächlichen Daten sind korrekt, aber die Zeichenfolge fehlt data:[<mediatype>][;base64], Präfix.

    – Martin Chang

    7. Oktober 2016 um 14:03 Uhr


  • new Buffer ist überflüssig. fs.readFileSync gibt den Puffer zurück, wenn die Codierung nicht angegeben ist. Du kannst einfach tun fs.readFileSync([..]).toString('BASE64').

    – Gajus

    25. August 2017 um 18:47 Uhr

  • @Gajus Du kannst sogar noch weiter gehen. readFileSync kann jetzt die Kodierung für Sie übernehmen. Mach einfach fs.readFileSync('...', { encoding: 'BASE64' })

    – Mike Martin

    9. Januar 2019 um 23:01 Uhr

var fs = require('fs');

function base64Encode(file) {
    var body = fs.readFileSync(file);
    return body.toString('base64');
}


var base64String = base64Encode('test.jpg');
console.log(base64String);

Der folgende Code liest eine Textdatei. Konvertiert es dann in Text, liest es dann als base64 und legt es in einen Binärpuffer und speichert es wieder in eine echte Binärdatei.

import { readFileSync, writeFileSync } from 'fs'
import { tmpdir } from 'os'
const contents = readFileSync('./temp.txt')
const buffedInput = Buffer.from(contents.toString(), 'base64')
writeFileSync(`${tmpdir}/temp.zip`, buffedInput)

1202210cookie-checkReadFile in Base64-Nodejs

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy