我在任何地方找到的答案都不起作用。我正在尝试扩展“开发 Backbone.js 应用程序”中的示例来上传文件。尽管表单具有 enctype="multipart/form-data",但 request.files 始终未定义。
HTML 表单为:
<form id="addBook" action="..." enctype="multipart/form-data">
<div>
<label for="coverImage">CoverImage: </label><input id="coverImage" name="coverImage" type="file" />
<label for="title">Title: </label><input id="title" type="text" />
<label for="author">Author: </label><input id="author" type="text" />
<label for="releaseDate">Release date: </label><input id="releaseDate" type="text" />
<label for="keywords">Keywords: </label><input id="keywords" type="text" />
<button id="add">Add</button>
</div>
</form>
保存新记录的主干是
addBook: function( e ) {
e.preventDefault();
var formData = {};
var reader = new FileReader();
$( '#addBook div' ).children( 'input' ).each( function( i, el ) {
if( $( el ).val() != '' )
{
if( el.id === 'keywords' ) {
formData[ el.id ] = [];
_.each( $( el ).val().split( ' ' ), function( keyword ) {
formData[ el.id ].push({ 'keyword': keyword });
});
} else if( el.id === 'releaseDate' ) {
formData[ el.id ] = $( '#releaseDate' ).datepicker( 'getDate' ).getTime();
} else {
formData[ el.id ] = $( el ).val();
}
}
});
console.log(formData);
this.collection.create( formData );
}
被调用的 Node 。
//Insert a new book
app.post( '/api/books', function( request, response ) {
console.log(request.body);
console.log(request.files);
});
发送到 Node 的 coverimage 的值是正确的,我只是从未在 request.files 中得到任何内容。我有一个很酷的拖放功能,我想用它来代替,但在我开始使用它之前,我陷入了困境。
我尝试了 JQuery-file-upload,但没有成功。
如果我有头发,我现在就会把它拔掉。
最佳答案
我不会将文件作为 model.save
/collection.create(model)
的一部分提交。
我用的是Plupload对于文件上传管理器,将文件提交给上传处理程序。此上传处理程序要么返回上传文件的路径,要么返回 fileId(如果引用存储在数据库表中)。
从那里,我在主干模型中填充一个属性,然后保留该模型。您可以让您的模型 listenTo
plupload,用于上传完成事件或类似事件。
关于node.js - backbonejs Node 文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16903239/