Muszę przesłać obraz na serwer NodeJS do jakiegoś katalogu. Używam connect-busboy
do tego modułu węzła.
Miałem dataURL
obraz, który przekonwertowałem na blob za pomocą następującego kodu:
dataURLToBlob: function(dataURL) {
var BASE64_MARKER = ';base64,';
if (dataURL.indexOf(BASE64_MARKER) == -1) {
var parts = dataURL.split(',');
var contentType = parts[0].split(':')[1];
var raw = decodeURIComponent(parts[1]);
return new Blob([raw], {type: contentType});
}
var parts = dataURL.split(BASE64_MARKER);
var contentType = parts[0].split(':')[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;
var uInt8Array = new Uint8Array(rawLength);
for (var i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], {type: contentType});
}
Potrzebuję sposobu na przekonwertowanie obiektu BLOB na plik, aby przesłać obraz.
Czy ktoś mógłby mi w tym pomóc?
javascript
node.js
file-upload
blob
pominąć
źródło
źródło
blob
. Tak więc najpierw wyodrębniłem nazwę pliku, który przycinałem, a następnie nadałem to samo,filename
tak aby przycięty plik podczas przesyłania go na serwer, wykonującform.append("blob",blob, filename);
.Odpowiedzi:
Ta funkcja konwertuje a
Blob
na aFile
i działa świetnie dla mnie.Waniliowy JavaScript
TypeScript (z poprawnymi typami)
Stosowanie
źródło
any
w TypeScript. Zobacz ten przykład.b.__proto__ = File.prototype
, a roztwór staje się sen, że nawet sztuczkib instanceOf File
dotrue
Możesz użyć konstruktora File:
Zgodnie ze specyfikacją w3 doda to bajty, które zawiera obiekt BLOB, do bajtów nowego obiektu File i utworzy plik o określonej nazwie http://www.w3.org/TR/FileAPI/#dfn-file
źródło
TypeError: FileConstructor is not a constructor (evaluating 'new File([''], 'file.pdf', {'size': 1000, 'type': 'application/pdf'})')
Odpowiedź Joshua P Nixona jest poprawna, ale musiałem również ustawić datę ostatniej modyfikacji. więc oto kod.
1534584790000 to uniksowa sygnatura czasowa dla „ GMT: sobota, 18 sierpnia 2018 9:33:10 ”
źródło
instanceof
jak przyjęta odpowiedźAby działało, musiałem jawnie podać typ, chociaż jest on zawarty w obiekcie blob, robiąc to:
źródło
Mój nowoczesny wariant:
źródło
fd.set('a', blobData, 'filename')
fd.set
Użyj
saveAs
w projekcie FileSaver.js github.FileSaver.js
implementujesaveAs()
interfejs FileSaver w przeglądarkach, które nie obsługują go natywnie.źródło
Maszynopis
Javascript
Wynik
źródło