2

我正在尝试通过表单上传 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 返回一个空白字符串。这是一个屏幕截图: 错误截图

我试过在谷歌上搜索,但没有找到任何东西。我也尝试过使用 Safari 和 Chrome。File 对象在 OS X 10.5.8 上没有显示类型属性吗?

4

1 回答 1

3

在我的 (Windows) 系统上,.csv 文件被映射到“application/vnd.ms-excel”MIME 类型,因此此代码在我的计算机上也会失败。在 Windows 上,根据用户设置的默认应用程序填充 mime 类型,该应用程序映射到 HKEY_CLASSES_ROOT\MIME\Database\Content Type 中的注册表项。无法识别的文件类型返回 type="" (如您所见)。看起来事情在 OSX 中的行为相似

我认为你最好的选择是检查文件是否以“.csv”结尾。然后您的服务器端代码可以检查它是否是有效的 csv 文件,如果不是则返回错误。

于 2013-07-30T13:32:49.983 回答