经典ASP记录集插入和文件上传

时间:2018-08-08 12:32:31

标签: ajax iis asp-classic

我的任务是将文件上传添加到使用Classic ASP的基于Web的应用程序中。不幸的是,我被禁止使用任何其他技术,并且被告知这是在暗示什么,但ASP在这种情况下无济于事。

提交包含一个输入字段和一个文件字段的简单表单时,将调用带有$ .ajax的表单POST,该表单指向一个经典的ASP文件,该文件通过request.form处理记录集插入。我添加了contentType:false,希望能使用enctype =“ multipart / form-data”,但出现以下错误:

对象不支持此属性或方法:'Binary',因为我在下面发布的插入内容中更改了request.form,但它也无法与request.form一起使用。使用request.form会出现以下错误:[Microsoft] [ODBC Microsoft Access Driver]条件表达式中的数据类型不匹配。

  $.ajax({
type   : 'POST',
url    : 'manipulateData.asp?sqlType='+newdbTable+'&sqlRecordId='+recordId+'',
data   : formData,
    encode : true,
contentType : false,
success: function(data) {
    // do something with data
},
error: function(data) {
    console.log("ERROR" + JSON.stringify(data));
}

})

Classic ASP文件中的handlerData.asp内是一个连接字符串,在case语句内被调用,在该字符串的下方是下图所示的单个文件上传的更多Classic ASP文件。

我正在尝试实现Shadow Wizards解决方案,但由于我想使事情保持简单,因此想先尝试一下。

 cn.execute("INSERT INTO CONTENT (contentTitle, contentContent, contentDate, categoryId, userLevel) VALUES ('" & Request.Form("contentTitle") & "','" & Request.Form("contentContent") & "','" & Request.Form("contentDate") & "','" & Request.Form("categoryTitle") & "','" & Request.Form("userLevel") & "')")

' TEST FILE UPLOAD
 Dim objUpload 
 Dim strFile, strPath
 ' Instantiate Upload Class '
 Set objUpload = New clsUpload
 strFile = objUpload.Fields("file").FileName
 strPath = server.mappath("/files") & "/" & strFile
 ' Save the binary data to the file system '
 objUpload("file").SaveAs strPath
 Set objUpload = Nothing

我已经准备好不能同时使用request.form和request.binary吗?如果没有,那会有什么替代方案?

1 个答案:

答案 0 :(得分:1)

我不喜欢这个答案,但是成功调用另一个函数来获取文件的路径,然后在另一个ajax调用中将其传递给Classic ASP文件以进行上传。

  $.ajax({
    type   : 'POST',
    url    : 'manipulateData.asp?sqlType='+newdbTable+'&sqlRecordId='+recordId+'',
    data   : formData,
    encode : true,
    contentType : false,
    success: function(data) {
    // file upload function
      uploadFile()
    },
    error: function(data) {
      console.log("ERROR" + JSON.stringify(data));
     }
    })

上传ajax

function uploadFile(formData) {
var data = new FormData();
$.each($('#file1')[0].files, function(i, file) {
    data.append('file-'+i, file);
});


  $.ajax({
            type        : 'POST',
             url         : 'uploadFileTest.asp',
            data        : data,
            async: true,
            cache: false,
            contentType: false,
            processData: false,
            success: function(data) {
                // do something else here or not
            },
            error: function(data) {
                // SHOW ERROR
                console.log("ERROR" + JSON.stringify(data));
            }
        })
} 

我仍然非常想知道是否可以消除第二个函数调用,或者这是否是Classic ASP处理FORM和BINARY帖子的本质,所以它们必须分开?