Hướng dẫn validate base64 nodejs - xác thực nodejs base64

Tôi muốn làm một cái gì đó tương tự, và cuối cùng đã googling nó và không tìm thấy gì, vì vậy tôi đã tự làm trình xác thực cơ sở của mình:

function isBase64(text) {
    let utf8 = Buffer.from(text).toString("utf8");
    return !(/[^\x00-\x7f]/.test(utf8));
}

Điều này không tuyệt vời, bởi vì tôi đã sử dụng nó cho một mục đích khác nhưng bạn có thể xây dựng trên nó, đây là một ví dụ sử dụng

function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}
1 để ngăn chặn các ký tự không hợp lệ (chúng bị bỏ qua):

function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}

Bây giờ, về cách thức hoạt động:

function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}
2 loại bỏ tất cả các chars base64 không hợp lệ khỏi chuỗi, sau đó chuyển đổi chuỗi thành bộ đệm,
function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}
3, chuyển đổi bộ đệm thành một chuỗi.
function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}
1 làm một cái gì đó tương tự, nhưng thay vì loại bỏ các ký tự không hợp lệ, nó sẽ gây ra lỗi khi nó gặp phải một con (do đó
function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}
5).

function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}
6 sẽ trả về
function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}
7 nếu tất cả các ký tự từ chuỗi được giải mã thuộc về Charset ASCII, nếu không nó sẽ trả về
function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}
8. Điều này có thể được thay đổi để sử dụng một ký tự nhỏ hơn, ví dụ,
function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}
9 sẽ chỉ trả về
function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}
7 nếu tất cả các ký tự là chữ và số.

Có thể có các kịch bản mà bạn cần chuyển đổi chuỗi Base64 trở lại một tệp. Bài viết này sẽ chỉ cho bạn cách.

Chế độ xem cấp cao

Ví dụ, biểu diễn chuỗi cơ sở64 của hình ảnh PNG trông giống như:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...

Để chuyển đổi nó trở lại một hình ảnh, chúng ta cần phải:

  • Loại bỏ phần
    data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...
    1
  • Viết chuỗi còn lại vào một tệp bằng mã hóa Base64.

Mật mã

Tôi đang dùng:

let base64String = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA'; 


let base64Image = base64String.split(';base64,').pop();

Để ghi vào một tệp

Tôi đang dùng:

import fs from 'fs';

fs.writeFile('image.png', base64Image, {encoding: 'base64'}, function(err) {
console.log('File created');
});

Để ghi vào một tệp

Don Tiết quên data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...2 ở đây và bạn sẽ tốt để đi.

CẬP NHẬT

Tôi đã tìm thấy liên kết thú vị này làm thế nào để giải quyết vấn đề của bạn trong PHP. Tôi nghĩ rằng bạn đã quên thay thế

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...
3 bằng
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...
4AS được hiển thị trong liên kết.

Tôi đã lấy vòng tròn này từ http://images-mediawiki-sites.thefullwiki.org/04/1/7/5/6204600836255205.png dưới dạng mẫu trông giống như:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAAAAACPAi4CAAAAB3RJTUUH1QEHDxEhOnxCRgAAAAlwSFlzAAAK8AAACvABQqw0mAAAAXBJREFUeNrtV0FywzAIxJ3+K/pZyctKXqamji0htEik9qEHc3JkWC2LRPCS6Zh9HIy/AP4FwKf75iHEr6eU6Mt1WzIOFjFL7IFkYBx3zWBVkkeXAUCXwl1tvz2qdBLfJrzK7ixNUmVdTIAB8PMtxHgAsFNNkoExRKA+HocriOQAiC+1kShhACwSRGAEwPP96zYIoE8Pmph9qEWWKcCWRAfA/mkfJ0F6dSoA8KW3CRhn3ZHcW2is9VOsAgoqHblncAsyaCgcbqpUZQnWoGTcp/AnuwCoOUjhIvCvN59UBeoPZ/AYyLm3cWVAjxhpqREVaP0974iVwH51d4AVNaSC8TRNNYDQEFdlzDW9ob10YlvGQm0mQ+elSpcCCBtDgQD7cDFojdx7NIeHJkqi96cOGNkfZOroZsHtlPYoR7TOp3Vmfa5+49uoSSRyjfvc0A1kLx4KC6sNSeDieD1AWhrJLe0y+uy7b9GjP83l+m68AJ72AwSRPN5g7uwUAAAAAElFTkSuQmCC

Tiếp theo tôi đặt nó qua http://www.greywyvern.com/code/php/binary2base64 đã trả lại cho tôi:

var fs      = require('fs'),
data        = fs.readFileSync('base64', 'utf8'),
base64Data,
binaryData;

base64Data  =   data.replace(/^data:image\/png;base64,/, "");
base64Data  +=  base64Data.replace('+', ' ');
binaryData  =   new Buffer(base64Data, 'base64').toString('binary');

fs.writeFile("out.png", binaryData, "binary", function (err) {
    console.log(err); // writes out file without error, but it's not a valid image
});

Đã lưu chuỗi này vào

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...
5 mà tôi đã đọc trong mã của mình.

Tôi nhận được một vòng tròn trở lại, nhưng điều buồn cười là các tệp đã thay đổi :) ...

CHẤM DỨT

Khi bạn đọc lại hình ảnh, tôi nghĩ bạn cần thiết lập tiêu đề


Lấy ví dụ ImagePng từ trang PHP:

Tôi nghĩ rằng dòng thứ hai

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...
6, rất quan trọng khác, hình ảnh của bạn sẽ không được hiển thị trong trình duyệt, nhưng chỉ là một loạt dữ liệu nhị phân được hiển thị cho trình duyệt.

curl --head "http://www.gravatar.com/avatar/cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG"
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 03 Aug 2011 12:11:25 GMT
Content-Type: image/jpeg
Connection: keep-alive
Last-Modified: Mon, 04 Oct 2010 11:54:22 GMT
Content-Disposition: inline; filename="cabf735ce7b8b4471ef46ea54f71832d.jpeg"
Access-Control-Allow-Origin: *
Content-Length: 1258
X-Varnish: 2356636561 2352219240
Via: 1.1 varnish
Expires: Wed, 03 Aug 2011 12:16:25 GMT
Cache-Control: max-age=300
Source-Age: 1482

$ mkdir -p ~/tmp/6922728
$ cd ~/tmp/6922728/
$ touch app.js

app.js

function isBase64(text) {
    try {
        let utf8 = atob(text);
        return !(/[^\x00-\x7f]/.test(utf8));
    } catch (_) {
        return false;
    }
}
0

Trong Express, bạn chỉ cần sử dụng một cái gì đó như dưới đây. Tôi sẽ hiển thị gravatar của bạn được đặt tại http://www.gravatar.com/avatar/cabf735ce7b8b4471ef46ea54f71832d?s=32&d= Tôi chỉ yêu cầu các tiêu đề vì những điều khác sẽ hiển thị một loạt các thứ nhị phân (Google Chrome ngay lập tức đi đến tải xuống) để điều khiển:

Features..

Làm cách nào để chuyển đổi từ cơ sở 64 sang pdf?

Chuyển đổi nhanh chóng và dễ dàng. Tải lên tài liệu của bạn, chọn loại Định dạng lưu và nhấp vào nút Chuyển đổi trên mạng. Bạn sẽ nhận được liên kết tải xuống ngay khi tệp được chuyển đổi ..

Chuyển đổi từ bất cứ đâu. Nó hoạt động từ tất cả các nền tảng bao gồm Windows, Mac, Android và iOS. ....

Chất lượng chuyển đổi ..

BTOA có bị phản đối không?btoa and atob are deprecated for Node JS. If you are coding for the web browser you just need to prepend the window to get rid of this deprecation mark. Otherwise, you could install buffer with "yarn add buffer" or "npm i buffer" to run on browser.

Các chức năng này BTOA và ATOB không được dùng cho Node JS. Nếu bạn đang mã hóa cho trình duyệt web, bạn chỉ cần dành cho cửa sổ để loại bỏ dấu không dùng nữa. Nếu không, bạn có thể cài đặt bộ đệm với "Buffer thêm sợi" hoặc "bộ đệm NPM I" để chạy trên trình duyệt.

Làm thế nào để tôi giải mã base64?provide the path of the file with the --decode flag. As with encoding files, the output will be a very long string of the original file. You may want to output stdout directly to a file.

Base64 có thể nén chuỗi không?

1 câu trả lời. Hiển thị hoạt động trên bài viết này. Base64 đã được mã hóa theo cách không phù hợp với hầu hết các thuật toán nén - xem tại sao dữ liệu được mã hóa Base64 lại quá tệ? Để biết chi tiết. Bạn sẽ muốn nén dữ liệu nhị phân ban đầu và sau đó base64 dữ liệu được nén hoặc không bận tâm chuyển đổi sang base64 ...Base64 is already encoded in a way which does not suit most compression algorithms - see Why does base64-encoded data compress so poorly? for details. You will want to compress the original binary data and then base64 the compressed data, or don't bother converting to base64 at all ...