Ich denke, dass das Zuordnen des Content-Type-Headers in der Anfrage auch funktionieren wird. Dies funktioniert auch in Fällen, in denen Sie eine Datei ohne Erweiterung hochladen. (wenn der Dateiname keine Erweiterung in der Anfrage hat)
Angenommen, Sie senden Ihre Daten über HTTP POST:
POST /upload2 HTTP/1.1
Host: localhost:7098
Connection: keep-alive
Content-Length: 1047799
Accept: */*
Origin: http://localhost:63342
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Content-Type: multipart/form-data; boundary=---- WebKitFormBoundaryPDULZN8DYK3VppPp
Referer: http://localhost:63342/Admin/index.html? _ijt=3a6a054pasorvrljf8t8ea0j4h
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,az;q=0.6,tr;q=0.4
Request Payload
------WebKitFormBoundaryPDULZN8DYK3VppPp
Content-Disposition: form-data; name="image"; filename="blob"
Content-Type: image/png
------WebKitFormBoundaryPDULZN8DYK3VppPp--
Hier enthält der Name Content-Type-Header den MIME-Typ der Daten. Wenn Sie diesen MIME-Typ einer Erweiterung zuordnen, erhalten Sie die Dateierweiterung :).
Restify BodyParser wandelt diesen Header in einer Eigenschaft mit dem Namen Typ
File {
domain:
Domain {
domain: null,
_events: { .... },
_eventsCount: 1,
_maxListeners: undefined,
members: [ ... ] },
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
size: 1047621,
path: '/tmp/upload_2a4ac9ef22f7156180d369162ef08cb8',
name: 'blob',
**type: 'image/png'**,
hash: null,
lastModifiedDate: Wed Jul 20 2016 16:12:21 GMT+0300 (EEST),
_writeStream:
WriteStream {
... },
writable: true,
domain:
Domain {
...
},
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
path: '/tmp/upload_2a4ac9ef22f7156180d369162ef08cb8',
fd: null,
flags: 'w',
mode: 438,
start: undefined,
pos: undefined,
bytesWritten: 1047621,
closed: true }
}
Sie können diesen Header verwenden und die Erweiterungszuordnung (Teilzeichenfolge usw.) manuell durchführen. Hierfür gibt es jedoch auch vorgefertigte Bibliotheken. Unter zwei waren die Top-Ergebnisse, als ich eine Google-Suche durchgeführt habe
und ihre Verwendung ist ebenfalls einfach:
app.post('/upload2', function (req, res) {
console.log(mime.extension(req.files.image.type));
}
Über dem Snippet wird PNG auf der Konsole gedruckt .