Ich versuche, eine Datei und ihren Dateinamen in der gleichen Anfrage in eckigen hochzuladen und dann in Flask zu erhalten und auf CD zu schreiben. Die Datei wird von der lokalen Platte gelesen werden:Binary-Datei und Name in der gleichen Anfrage in AngularJS und Flask
reader.readAsArrayBuffer(importData.ruleFile.files[0]);
die HTTP-Anforderung:
$http({
url: baseUrlService.baseURL + 'importtifile',
method: 'POST',
headers: {'Content-Type': undefined},
data: {
filename: importData.ruleFileName,
// filedata: new DataView(reader.result)
// filedata: reader.result
filedata: new Uint8Array(reader.result)
},
transformRequest: function (data, headersGetter) {
var formData = new FormData();
formData.append('filename', data.filename);
formData.append('filedata', data.filedata);
return formData;
}
}).then(
...
und der Kolben Teil ist:
@api.route('/importfile', methods=['POST'])
def import_file():
file_name = request.form['filename']
file_data = request.form['filedata']
f = NamedTemporaryFile(delete=False)
f.write(file_data)
f.close()
Die Frage ist:
Wenn Ich sende Datei von eckigen als neue DataView (reader.result) die Datei dass der Server schreibt enthält nur eine Saite:
[Objekt Dataview]
Wenn ich es als neue Uint8Array (reader.result) die Datei senden, die der Server schreibt enthält nur die Zeichenfolge:
[object Uint8Array]
Wie kann ich die tatsächliche da ta übertragen?
Ich habe versucht, Datei lesenAsAsBinaryString, aber in diesem Fall ist die Datei, die auf der Serverseite geschrieben ist etwa doppelt so groß wie das Original.
Vielen Dank im Voraus für jede Hilfe.