我的任务是将文件上传添加到使用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吗?如果没有,那会有什么替代方案?
答案 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帖子的本质,所以它们必须分开?