将缓冲区转换为文件 [FileCollection:meteor/ostrio:files]
Convert buffer to file [FileCollection:meteor/ostrio:files]
当我从输入中获取图像时
我必须将它转换为缓冲区才能对图像进行一些操作,因此我有一个缓冲区而不是文件。
我在流星中使用 FileCollection 将图像存储在 mongo 集合
中
uploadIt(e) {
e.preventDefault();
var reader = new FileReader();
var buffer;
var file = e.currentTarget.files[0];
if (e.currentTarget.files && e.currentTarget.files[0]) {
reader.onload = function(e){
buffer = new Uint8Array(reader.result);
// some operations over the buffer
};
reader.readAsArrayBuffer(file);
if (file) {
let uploadInstance = CourseFilesCollection.insert({
file: buffer,
..
..
})
}
}
但是当我插入它时出现这个错误
message: "[FilesCollection] [insert] Have you forget to pass a File itself?
代码最初是
if (file) {
let uploadInstance = CourseFilesCollection.insert({
file: file,
..
..
})
}
但由于我必须对图像执行操作,所以我需要以某种方式将缓冲区转换为文件
任何想法如何解决这个问题?
简答
使用 file constructor 将位转换回文件容器:
file: new File([buffer], file.name, file)
您也可以尝试使用 blob 以及更广泛的浏览器支持...但是如果您想使用最新的技术,那么:
async uploadIt (evt) {
evt.preventDefault()
const file = evt.currentTarget.files[0]
if (!file) return
const buffer = new Uint8Array(await file.arrayBuffer())
// some operations over the buffer
const uploadInstance = CourseFilesCollection.insert({
file: new File([buffer], file.name, file)
})
}
当我从输入中获取图像时 我必须将它转换为缓冲区才能对图像进行一些操作,因此我有一个缓冲区而不是文件。 我在流星中使用 FileCollection 将图像存储在 mongo 集合
中uploadIt(e) {
e.preventDefault();
var reader = new FileReader();
var buffer;
var file = e.currentTarget.files[0];
if (e.currentTarget.files && e.currentTarget.files[0]) {
reader.onload = function(e){
buffer = new Uint8Array(reader.result);
// some operations over the buffer
};
reader.readAsArrayBuffer(file);
if (file) {
let uploadInstance = CourseFilesCollection.insert({
file: buffer,
..
..
})
}
}
但是当我插入它时出现这个错误
message: "[FilesCollection] [insert] Have you forget to pass a File itself?
代码最初是
if (file) {
let uploadInstance = CourseFilesCollection.insert({
file: file,
..
..
})
}
但由于我必须对图像执行操作,所以我需要以某种方式将缓冲区转换为文件 任何想法如何解决这个问题?
简答
使用 file constructor 将位转换回文件容器:
file: new File([buffer], file.name, file)
您也可以尝试使用 blob 以及更广泛的浏览器支持...但是如果您想使用最新的技术,那么:
async uploadIt (evt) {
evt.preventDefault()
const file = evt.currentTarget.files[0]
if (!file) return
const buffer = new Uint8Array(await file.arrayBuffer())
// some operations over the buffer
const uploadInstance = CourseFilesCollection.insert({
file: new File([buffer], file.name, file)
})
}