在接收图像时处理客户端请求中的元数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在接收图像时处理客户端请求中的元数据相关的知识,希望对你有一定的参考价值。

在尝试处理上传的图片并将其写入文件时,我遇到了问题。通常这种方式非常好:

req.on('data', function (data) {
  body += data;
  wstream.write(data);
});
// end process data
req.on('end', function () {
  wstream.end();
});

在这种情况下,写入的文件头看起来像这样:

PNG ...后跟二进制数据。

但在某些情况下,写文件看起来像这样:

--72e245e8-38eb-41e8-9118-fc0405e4837c Content-Type:multipart / form-data Content-Disposition:form-data;命名=图像;文件名= picture.jpg;文件名* = UTF-8''picture.jpg

可以想象,在我将元数据删除为内容类型等之前,这些图片不再有效。

但在我这样做之后,图片功能齐全且可用。

我试图访问请求数据并调用toString方法来替换“不需要的”部分,但是我完全弄乱了该输出文件的内容编码,它变得无法使用。

data = data.toString(/---.*/g), "");

任何想法如何做到这一点?

答案

我通过模块强大的帮助解决了我的问题。

var formidable = require('formidable');
var util = require('util');

form.parse(req, function(err, fields, files) {

    logger.debug("Received upload: " + util.inspect({fields: fields, files: files}));

});


form.on('fileBegin', function (name, file){

    file.path = "MyPathToDestinationFile";

    logger.debug("File  upload started for file '" + file.path + "'");

});


form.on('end', function() {

    logger.debug("File upload finished for file");

    // Send response to client

});


form.on('error', function(err) {

    logger.debug("Failed to finish upload due to '" + err + "'");

    // Send error to client

});

以上是关于在接收图像时处理客户端请求中的元数据的主要内容,如果未能解决你的问题,请参考以下文章

NN和2NN工作机制

Servlet处理GET和POST请求

.NET下使用Socket进行TCP传输时数据发送或接收不全

C#定时器接收定时发送和处理接收socket异步通信,接收值放在静态变量里,有时候收到的数据不完整。

request接收不存在的参数会是啥结果

主动模式和被动模式,添加监控主机,添加自定义模板,处理图像中的乱码,自动发现