我正在尝试通过表单上传csv文件,但在Mac OS X 10.5.8上遇到了问题。 这是相关的代码:
template = Handlebars.compile '''
<form action="/dashboard/csv-upload/" enctype="multipart/form-data" method="post" class="csv-upload">
<p>
<label for="id_uploaded_file" style="float:left;">Upload a CSV file:</label>
<input class="span2" name="uploaded_file" id="id_uploaded_file" type="file">
</p>
</form>
'''
class exports.uploadController extends Backbone.View
el: '#main-container'
events:
'submit form.csv-upload' : '_csvUpload'
initialize: () =>
@render()
render: () =>
return @ if @isRendered
@isRendered = true
_csvUpload : (e) =>
e.preventDefault()
file = @$('#id_uploaded_file')[0].files[0]
if not file
alert "Please select a file to upload, first."
return false
console.log(file.type)
if file.type != "text/csv" and file.type != "text/plain"
alert "Please upload a CSV or TXT file"
return false
我遇到的问题是,即使我上传.csv文件,我也会在Mac OS X 10.5.8上收到“请上传CSV或TXT文件”错误。 console.log返回一个空字符串。这是一个截图:
我尝试在Google上搜索,但没有找到任何内容。我也尝试过Safari和Chrome。在OS X 10.5.8上,File对象是否没有展示类型属性?
答案 0 :(得分:2)
在我的(Windows)系统上.csv文件被映射到“application / vnd.ms-excel”MIME类型,因此这段代码也会在我的计算机上失败。在Windows上,根据用户设置的默认应用程序填写mime类型,该应用程序映射到HKEY_CLASSES_ROOT \ MIME \ Database \ Content Type中的注册表项。无法识别的文件类型以type =“”返回(如您所见)。 It looks like things behave similarly in OSX
我认为最好的办法就是检查文件是否以“.csv”结尾。然后,您的服务器端代码可以检查它是否是有效的csv文件,如果不是则返回错误。