gpt4 book ai didi

javascript - 使用 javascript 解析 formdata 对象

转载 作者:行者123 更新时间:2023-11-30 07:05:39 25 4
gpt4 key购买 nike

我的公司使用一个 propitiatory 应用程序服务器,其中服务器端程序是用 javascript(不是 node.js)编写的。这是一个非常初始的事情,支持不是很好

现在这是我的问题:

我必须在服务器端处理上传的 csv .. 我正在使用 How can I upload files asynchronously? 的 super 答案(使用 jquery 传递 formdata 对象)并且我能够在服务器端访问发送的文件。但是我该如何解析呢?

看起来像这样

------WebKitFormBoundaryU5rJUDxGnj15hIGWContent-Disposition: form-data; name="fileToUpload"; filename="test.csv"Content-Type: application/vnd.ms-excel1234567891011121314151617181920------WebKitFormBoundaryU5rJUDxGnj15hIGW--

我真的很困惑如何在服务器端用纯 javascript 处理这个文件。

请帮忙。

最佳答案

最好使用 node-formidable , browserify 和 polyfill 它。这是一个独立的解析器,适用于字符串和原始响应。确保使用现代浏览器浏览原始内容。

/* 
* MultiPart_parse decodes a multipart/form-data encoded response into a named-part-map.
* The response can be a string or raw bytes.
*
* Usage for string response:
* var map = MultiPart_parse(xhr.responseText, xhr.getResponseHeader('Content-Type'));
*
* Usage for raw bytes:
* xhr.open(..);
* xhr.responseType = "arraybuffer";
* ...
* var map = MultiPart_parse(xhr.response, xhr.getResponseHeader('Content-Type'));
*
* TODO: Can we use https://github.com/felixge/node-formidable
* See http://stackoverflow.com/questions/6965107/converting-between-strings-and-arraybuffers
* See http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html
*
* Copyright@ 2013-2014 Wolfgang Kuehn, released under the MIT license.
*/
function MultiPart_parse(body, contentType) {
// Examples for content types:
// multipart/form-data; boundary="----7dd322351017c"; ...
// multipart/form-data; boundary=----7dd322351017c; ...
var m = contentType.match(/boundary=(?:"([^"]+)"|([^;]+))/i);

if ( !m ) {
throw new Error('Bad content-type header, no multipart boundary');
}

var boundary = m[1] || m[2];

function Header_parse(header) {
var headerFields = {};
var matchResult = header.match(/^.*name="([^"]*)"$/);
if ( matchResult ) headerFields.name = matchResult[1];
return headerFields;
}

function rawStringToBuffer( str ) {
var idx, len = str.length, arr = new Array( len );
for ( idx = 0 ; idx < len ; ++idx ) {
arr[ idx ] = str.charCodeAt(idx) & 0xFF;
}
return new Uint8Array( arr ).buffer;
}

// \r\n is part of the boundary.
var boundary = '\r\n--' + boundary;

var isRaw = typeof(body) !== 'string';

if ( isRaw ) {
var view = new Uint8Array( body );
s = String.fromCharCode.apply(null, view);
} else {
s = body;
}

// Prepend what has been stripped by the body parsing mechanism.
s = '\r\n' + s;

var parts = s.split(new RegExp(boundary)),
partsByName = {};

// First part is a preamble, last part is closing '--'
for (var i=1; i<parts.length-1; i++) {
var subparts = parts[i].split('\r\n\r\n');
var headers = subparts[0].split('\r\n');
for (var j=1; j<headers.length; j++) {
var headerFields = Header_parse(headers[j]);
if ( headerFields.name ) {
fieldName = headerFields.name;
}
}

partsByName[fieldName] = isRaw?rawStringToBuffer(subparts[1]):subparts[1];
}

return partsByName;
}

关于javascript - 使用 javascript 解析 formdata 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12066640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com