所以我需要:使用$http或$resource的角度将文本blob作为文件上传.js - 模仿卷曲样式的多部分/表单上传。
之前有一篇关于这个问题的帖子,我将尝试更明确地说明这个问题,希望有人可以确定我可能误入歧途的地方。
以下是我知道适用于此服务的 curl 命令的示例:
curl
http://c.docverter.com/convert
-F from=markdown
-F to=pdf
-F input_files[]=@<(echo hello) #or @example.md for a file
关于这个问题的上一篇文章
来自 Sinatra 的成功日志响应示例
{"input_files"=>[{:filename=>"api.md", :type=>"text/markdown", :name=>"input_files[]", :tempfile=>#<Tempfile:/tmp/RackMultipart20160426-3-5tb8po>, :head=>"Content-Disposition: form-data; name="input_files[]"; filename="api.md"rnContent-Type: text/markdownrn"}], "from"=>"markdown", "to"=>"pdf"}
关于我需要做什么
我需要上传降价文本(我假设使用 blob)作为"文件"——我已经尝试了 $resource 和$http,有十几种不同的配置,但没有运气。
在我进行第一百次角度尝试后的典型悲惨日志响应:
{"from"=>"markdown", "input_files"=>["{}"], "to"=>"pdf"}
代码示例:
angular.module('app')
.factory('convert', function ($resource) {
return $resource('http://c.docverter.com/convert', null, {
pdf: {
method: 'POST',
headers: { 'Content-Type': 'multipart/form-data' },
params: {
from: 'markdown',
to: 'pdf',
'input_files[]': new Blob(['##title'], 'text/markdown')
}
}
});
});
这实际上只是我尝试过的一个例子。 我已经为此敲定了几个小时,运气不佳,所以,也许这里有人对多部分表单数据有更多的了解,并且可以阐明斑点和角度的陷阱。
睡个好觉,再睡一个小时,我有一个有效的上传和下载:
var fd = new FormData();
var blob = new Blob([$scope.markdown], {type: 'text/markdown'});
var file = new File([blob], "abc.md");
fd.append('input_files[]', file);
fd.append('from', 'markdown');
fd.append('to', 'pdf');
$http.post('https://mydocverterserver.com/convert', fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined},
responseType: 'arraybuffer'
})
.success(function(response){
var b = new Blob([response], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
FileSaver.saveAs(b, 'abc.docx');
})
.error(function(res){
console.log(res);
});
仍然有点粗糙 - 我可能会清理它并将其转移到工厂,但它有效。
这是一个docx,但它也适用于降价和pdf。
FileSaver 位来自:angular-file-saver
如果您正在寻找像我一样的文档特定解决方案 - 我在这里解释服务器端修复