使用PapaParse和collectionFS在meteor中生成可下载的csv文件
Generating a downloadable csv file in meteor with PapaParse and collectionFS
所以我已经工作和研究了一整天,但不能使它工作。我正在编写我的第一个流星程序,它从几个csv文件中获取输入,运行一些数学运算,然后返回两个新的csv文件。我想我应该首先构建csv文件的解析和返回,因为这似乎是最困难的部分。我已经把文件弄进去了,但无论如何也弄不出来了。我敢肯定是我生成文件的方式出了问题,但是我搞不清楚。
我意识到有很多代码还不起作用,但现在我要做的就是通过vimeo字段传递csv文件,将其解析为数组,然后将其重新下载为csv,以确保解析/重新解析/下载工作。我终于设法生成了一个可下载的文件,但它是一个空的html文件。如有任何帮助,不胜感激。
下面是我当前的代码:
HTML
<head>
<title>Josh's App</title>
</head>
<body>
<div class="container">
{{>csvTemplate}}
{{>downloadLinkTemplate}}
</div>
</body>
<template name="csvTemplate">
<form id="csv-upload">
<p><span class="label">Instructors File</span><br><input name="csvInstructors" type="file"></p>
<p><span class="label">Video List</span><br><input name="csvVideos" type="file"></p>
<p><span class="label">Vimeo Report</span><br><input name="csvVimeo" type="file"></p>
<input type="submit" value="Submit">
</form>
</template>
<template name="downloadLinkTemplate">
test
<a title="downloadTest" href="#" download="{{downloadUrl}}">Test Link</a>
</template>
Js1
if (Meteor.isClient) {
var fileTest;
Template.csvTemplate.events({
'submit form': function() {
event.preventDefault();
var csvInstructors;
var csvVideos;
var csvVimeo;
Papa.parse(event.target.csvInstructors.files[0], {
header: true,
dynamicTyping: true,
complete: function(results) {
csvInstructors = results;
csvPass()
}
});
Papa.parse(event.target.csvVideos.files[0], {
header: true,
dynamicTyping: true,
complete: function(results) {
csvVideos = results;
csvPass()
}
});
Papa.parse(event.target.csvVimeo.files[0], {
header: true,
dynamicTyping: true,
complete: function(results) {
csvVimeo = results;
fileTest = statReportGenerate(csvVimeo);
csvPass()
}
});
var csvPass = function(){ _.after(3, function() {
maths(csvInstructors, csvVideos, csvVimeo)
});
}
}})
Template.downloadLinkTemplate.helpers({
downloadUrl: function() {
console.log("below function", fileTest);
return statReports.find({_id: fileTest}).url()
}
})
}
if (Meteor.isServer) {
// This code only runs on the server
}
Js2
statReports = new FS.Collection("statReports", {
stores: [new FS.Store.GridFS("statReports", {path: "/reports/statReports"})]
});
paymentReports = new FS.Collection("paymentReports", {
stores: [new FS.Store.GridFS("paymentReports", {path: "/reports/paymentReports"})]
});
if (Meteor.isClient) {
statReportGenerate = function (statData) {
console.log("wtf", statData.data);
var omg = Papa.unparse(statData.data,{
header: true
});
var blob = new Blob([omg], {type: "text/csv;charset=utf-8"});
console.log("blob", blob);
return statReports.insert(blob)._id;
};
}
正确的答案似乎是使用以下代码的链接:
<a title="downloadTest" href="{{downloadUrl}}" download="test.csv">Test Link</a>
感谢@paul为我指出了正确的方向。
另一个注意事项,在此工作之后,每当我下载文件时,我的服务器就开始崩溃。我必须运行:
meteor add cfs:http-methods@=0.0.27 --allow-incompatible-update
按照https://github.com/CollectionFS/Meteor-http-methods/issues/39
相关文章:
- 如何在生成下载文件时显示加载动画
- 直接下载文件,而不是从window.open(url)
- Javascript运行php文件,然后下载文件
- 在单击href链接的同时下载文件
- 通过javascript下载文件时设置文件名
- HTML锚标记无法在android平台中下载文件
- 链接/按钮从子文件夹下载文件--浏览器只是浏览
- iPhone强制下载文件
- 正在下载文件,同时加载另一个页面
- 如何在node.js中只下载文件的前10 KB
- 如何使用XMLHttpRequest下载文件
- 使用angular js在前端下载文件
- 使用blob从ajax结果下载文件
- 通过Android Chrome浏览器下载文件
- 使用AJAX下载文件.来自SD卡
- 如何使用phonegap从android中的URL下载文件
- 使用ajax下载文件
- 无法使用Angular JS和spring MVC打开下载文件
- 无法使用API-node.js从Google Drive下载文件
- 点击jQuery按钮下载文件