我将powerpoint文件转换为单个图像,当我从Node上传时,生成的图像最终会被破坏。
我使用的npm模块是request和node-form-data。
我从我的Node应用程序上传文件,如下所示:
var request = require('request');
var FormData = require('form-data');
function processPresentation(fileName,fileLoc,userId,customerId){
var data = new FormData();
data.append('my_file',fs.createReadStream(fileLoc));
var options = {
url: config.getConverter()+"?tenant="+customerId+"&author="+userId+"&name="+fileName+"&ext=ppt",
method: 'POST',
form:data,
headers:{'x-auth-token':token,'Content-Type':'application/vnd.openxmlformats-officedocument.presentationml.presentation'}
};
request.post(options,function(error,response,body){
console.log(body);
if(error){
console.log('error',error);
}
if(!response){
}
if(response.statusCode === 200){
addPresentation(JSON.parse(body),userId);
}
});
}
它经历了我的转换过程,我得到一个这样的文件作为输出:
如果您打开powerpoint文件并查看文本,请执行以下所有操作: http://pastebin.com/Dbh0JPKA
当我使用Postman并上传相同的文件时:
POST HTTP/1.1
Host: xxxx.xxxxxxxxxx.net?name=00a94ec9-8f70-4279-8972-f49935cda295&ext=ppt&tenant=543840f80019abda4937a9e2&author=543bef549f8d54a53a02f6d9
Content-Type: application/vnd.openxmlformats-officedocument.presentationml.presentation
x-auth-token: 772a5c0c023a447f68a9ac4fb2bb4bd39bafeb16b753df2222ffc835750cbbe6a4ef9ee82fab0902f39bc26851016a873d44c91a64f67de5e10044ef0787cebe
Cache-Control: no-cache
Postman-Token: 74aff430-f6b8-c7cd-d477-b9cc35897bb7
undefined
我得到这样的输出:
这就是我想要的。
答案 0 :(得分:1)
好吧,我认为问题在于您发送的是mime / multipart编码数据,而您只想将文件作为帖子的原始主体发送。有几种方法可以做到这一点。
选项#1,流式传输文件:
var options = {
url: config.getConverter()+"?tenant="+customerId+"&author="+userId+"&name="+fileName+"&ext=ppt",
headers:{'x-auth-token':token,'Content-Type':'application/vnd.openxmlformats-officedocument.presentationml.presentation'}
};
fs.createReadStream(fileLoc).pipe(request.post(options));
这种技术实际上是将文件作为请求的原始邮件正文流式传输。
选项#2,阅读文件,然后发布:
var options = {
url: config.getConverter()+"?tenant="+customerId+"&author="+userId+"&name="+fileName+"&ext=ppt",
headers:{'x-auth-token':token,'Content-Type':'application/vnd.openxmlformats-officedocument.presentationml.presentation'},
body: fs.readFileSync(fileLoc)
};
request.post(options, callback);
在这里,您将文件读入字符串并使用body
选项发布。这会将帖子正文设置为原始而不是使用mime / multipart编码,就像使用formData
一样。
答案 1 :(得分:0)
尝试删除表单数据的require,然后执行以下操作:
var options = {
url: config.getConverter()+"?tenant="+customerId+"&author="+userId+"&name="+fileName+"&ext=ppt",
method: 'POST',
formData: {
my_file: fs.createReadStream(fileLoc)
},
headers:{'x-auth-token':token,'Content-Type':'application/vnd.openxmlformats-officedocument.presentationml.presentation'}
};
重要的是formData
与form
答案 2 :(得分:0)
执行此操作修复它:
var length = fs.statSync(fileLoc).size;
console.log('length is',length);
var req = request.post({uri: config.getConverter()+"?tenant="+customerId+"&author="+userId+"&name="+fileName+"&ext=ppt",
headers:{
'x-auth-token':token,
'Content-Type':'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'content-length':length
}
});
fs.createReadStream(fileLoc).pipe(req).pipe(process.stdout);