Javascript 是否可以获取从服务器下载的文件的md5哈希值?
在将文件存储到mongo数据库之前,是否可以使用从服务器下载的mongo grid fs获取文件的md5哈希值。现在使用下面的代码,它使用md5、文件名、内容类型等直接将数据存储到mongo,因为我使用了管道。现在我想在将文件存储到数据库之前先检查文件的md5散列,我想先获取文件的md5值,因为我想使用它来避免重复。现在我尝试记录文件存储。但我不认为它包含md5。有什么想法吗?非常感谢。顺便说一句,我使用的是mongo网格fs 文件存储数据 下载文件的代码Javascript 是否可以获取从服务器下载的文件的md5哈希值?,javascript,node.js,mongodb,mongoose,gridfs,Javascript,Node.js,Mongodb,Mongoose,Gridfs,在将文件存储到mongo数据库之前,是否可以使用从服务器下载的mongo grid fs获取文件的md5哈希值。现在使用下面的代码,它使用md5、文件名、内容类型等直接将数据存储到mongo,因为我使用了管道。现在我想在将文件存储到数据库之前先检查文件的md5散列,我想先获取文件的md5值,因为我想使用它来避免重复。现在我尝试记录文件存储。但我不认为它包含md5。有什么想法吗?非常感谢。顺便说一句,我使用的是mongo网格fs 文件存储数据 下载文件的代码 如果服务器没有随文件提供可靠的md5s
如果服务器没有随文件提供可靠的md5sum,则必须对整个文件内容进行md5sum计算。换句话说,不,你不能先得到md5。为了避免重复并避免下载两次,您可以设置一个临时存储来放置此类文件,在md5检查后进行移动或删除。因此,您的意思是我必须首先下载文件并将其存储在我的服务器上?是的,下载并存储。除非服务器为您执行md5,否则对我来说,这是一个糟糕的案例
GridWriteStream{
_writableState:WritableState{
objectMode:false,
highWaterMark:16384,
finalCalled:false,
needDrain:false,
ending:false,
ended:false,
finished:false,
destroyed:false,
decodeStrings:true,
defaultEncoding:'utf8',
length:0,
writing:false,
corked:0,
sync:true,
bufferProcessing:false,
onwrite:[
Function: bound onwrite
],
writecb:null,
writelen:0,
bufferedRequest:null,
lastBufferedRequest:null,
pendingcb:0,
prefinished:false,
errorEmitted:false,
emitClose:true,
autoDestroy:false,
bufferedRequestCount:0,
corkedRequestsFree:{
next:null,
entry:null,
finish:[
Function: bound onCorkedFinish
]
}
},
writable:true,
_events:[
Object: null prototype
]{
},
_eventsCount:0,
_maxListeners:undefined,
_opened:false,
_opening:true,
_writable:true,
_closing:false,
_destroyed:false,
_errorEmitted:false,
_grid:Grid{
db:Db{
_events:[
Object: null prototype
]{
},
_eventsCount:0,
_maxListeners:undefined,
s:[
Object
],
serverConfig:[
Getter
],
bufferMaxEntries:[
Getter
],
databaseName:[
Getter
]
},
mongo:{
[
Function
] MongoError:[
Function
],
Admin:[
Function
],
MongoClient:[
Function
],
Db:[
Function
],
Collection:[
Function
],
Server:[
Function
],
ReplSet:[
Function
],
Mongos:[
Function
],
ReadPreference:[
Function
],
GridStore:[
Function
],
Chunk:[
Function
],
Logger:[
Function
],
Cursor:[
Function
],
GridFSBucket:[
Function
],
CoreServer:[
Function
],
CoreConnection:[
Function
],
Binary:[
Function
],
Code:[
Function
],
Map:[
Function
],
DBRef:[
Function
],
Double:[
Function
],
Int32:[
Function
],
Long:[
Function
],
MinKey:[
Function
],
MaxKey:[
Function
],
ObjectID:[
Function
],
ObjectId:[
Function
],
Symbol:[
Function
],
Timestamp:[
Function
],
Decimal128:[
Function
],
connect:[
Circular
],
instrument:[
Function
]
},
curCol:'fs'
},
options:{
filename:'f9bd6032ceae47a8b8b9be07a5dc839e.jpg',
data:'1'
},
name:'f9bd6032ceae47a8b8b9be07a5dc839e.jpg',
id:5d9eef3dde7cc73550be84d8,
mode:'w',
_store:GridStore{
db:Db{
_events:[
Object: null prototype
]{
},
_eventsCount:0,
_maxListeners:undefined,
s:[
Object
],
serverConfig:[
Getter
],
bufferMaxEntries:[
Getter
],
databaseName:[
Getter
]
},
referenceBy:1,
fileId:5d9eef3dde7cc73550be84d8,
filename:'f9bd6032ceae47a8b8b9be07a5dc839e.jpg',
mode:'w',
options:{
filename:'f9bd6032ceae47a8b8b9be07a5dc839e.jpg',
data:'1'
},
isOpen:false,
root:'fs',
position:0,
readPreference:'primary',
writeConcern:{
w:1
},
internalChunkSize:261120,
promiseLibrary:[
Function: Promise
],
chunkSize:[
Getter/Setter
],
md5:[
Getter
],
chunkNumber:[
Getter
]
},
_delayedWrite:null,
_delayedFlush:null,
_delayedClose:null
}
var download = function (url, dest, filename callback) {
const file = filename
const fileStorage = gfs.createWriteStream({ filename: file});
// request.get(url)
// .on('error', function (err) { console.log(err) })
// .pipe(fileStorage)
// .on('close', callback);
};
final_list.forEach(function (str) {
var filename = str.split('/').pop();
console.log('Downloading ' + filename);
download(str, filename, function () { console.log('Finished Downloading' + "" + filename) });
});