如何把uni.uploadFile传到asp后端的数据保存成图片?我打开myfile.png发现出错
前端代码:
bb16(e) {
uni.chooseImage({
count: 9,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: function(res) {
console.log(res.tempFilePaths[0])
uni.uploadFile({
url: 'http://localhost/app/1.asp?id1=7&id2=addoil', // 后端api接口
filePath: res.tempFilePaths[0], // uni.chooseImage函数调用后获取的本地文件路劲
name: 'file', //后端通过'file'获取上传的文件对象
success: (res) => {
console.log(res)
},
fail: (err) => {
console.log('uploadImage fail', err);
console.log(err.data)
uni.showModal({
content: err.errMsg,
showCancel: false
});
}
})
}
})
},
后端代码
FormSize=Request.TotalBytes'TotalBytes 属性指定客户端在请求正文中发送的总字节数
response.write "字节数:"&FormSize
' 检查是否有文件上传
If Request.TotalBytes > 0 Then
Dim stream ' ADODB.Stream对象
Set stream = Server.CreateObject("ADODB.Stream")
stream.Type = 1 ' 二进制流
stream.Mode = 3 ' 读/写模式
stream.Open ' 打开Stream
' 读取上传的文件内容
stream.Write Request.BinaryRead(Request.TotalBytes)
' 保存文件到服务器
stream.SaveToFile "d:\myfile.png", 2 ' 2表示覆盖已有文件
stream.Close
Set stream = Nothing
Response.Write "文件上传成功!"
Else
Response.Write "请选择要上传的文件!"
End If
别看机器人的回答了,估计机器人都不懂 vbscript,你要觉得可以远程,我可以帮你看下
该回答引用ChatGPT
FormSize=Request.TotalBytes
response.write "字节数:"&FormSize
If Request.TotalBytes > 0 Then
Dim stream
Set stream = Server.CreateObject("ADODB.Stream")
stream.Type = 1
stream.Mode = 3
stream.Open
stream.Write Request.BinaryRead(Request.TotalBytes)
' 保存文件到服务器
stream.SaveToFile "D:\\myfile.png", 2
stream.Close
Set stream = Nothing
Response.Write "文件上传成功!"
Else
Response.Write "请选择要上传的文件!"
End If
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据您提供的代码,似乎您的ASP后端已经正确地接收到了前端上传的文件数据。但是您可能会遇到以下问题:
您可以在前端代码中使用uni.uploadFile的formData参数来指定上传的文件名,例如:
uni.uploadFile({
url: 'http://localhost/app/1.asp?id1=7&id2=addoil',
filePath: res.tempFilePaths[0],
name: 'file',
formData: {
filename: 'myfile.png' // 指定上传的文件名
},
success: (res) => {
console.log(res)
},
fail: (err) => {
console.log('uploadImage fail', err);
console.log(err.data)
uni.showModal({
content: err.errMsg,
showCancel: false
});
}
})
您可以在前端代码中使用uni.uploadFile的fileType参数来指定上传的文件类型,例如:
uni.uploadFile({
url: 'http://localhost/app/1.asp?id1=7&id2=addoil',
filePath: res.tempFilePaths[0],
name: 'file',
fileType: 'image', // 指定上传的文件类型为图片
formData: {
filename: 'myfile.png'
},
success: (res) => {
console.log(res)
},
fail: (err) => {
console.log('uploadImage fail', err);
console.log(err.data)
uni.showModal({
content: err.errMsg,
showCancel: false
});
}
})
同时,您还需要确保ASP的执行账户有权限访问该位置的文件。默认情况下,ASP的执行账户是IUSR_<服务器名称>,该账户需要具有对该位置的读写权限。
如果您的web服务器的操作系统是Windows Server,您可以在文件的属性中的“安全”选项卡中添加IUSR_<服务器名称>账户并给予它对该文件的读写权限。例如,在Windows Server 2012中,您可以右键点击该文件,选择“属性”,然后选择“安全”选项卡,在该选项卡中点击“编辑”按钮,然后添加IUSR_<服务器名称>账户并给予它对该文件的读写权限即可。
如果您的web服务器的操作系统是Linux,您可以使用chmod命令来修改文件的权限,例如:
chmod 777 d:\myfile.png
最后,您的完整的前端和后端代码可能会像这样:
前端代码:
uni.chooseImage({
count: 9,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: function(res) {
console.log(res.tempFilePaths[0])
uni.uploadFile({
url: 'http://localhost/app/1.asp?id1=7&id2=addoil',
filePath: res.tempFilePaths[0],
name: 'file',
fileType: 'image',
formData: {
filename: 'myfile.png'
},
success: (res) => {
console.log(res)
},
fail: (err) => {
console.log('uploadImage fail', err);
console.log(err.data)
uni.showModal({
content: err.errMsg,
showCancel: false
});
}
})
}
})
后端代码:
<%
' 检查是否有文件上传
If Request.TotalBytes > 0 Then
Dim stream ' ADODB.Stream对象
Set stream = Server.CreateObject("ADODB.Stream")
stream.Type = 1 ' 二进制流
stream.Mode = 3 ' 读/写模式
stream.Open ' 打开Stream
' 读取上传的文件内容
stream.Write Request.BinaryRead(Request.TotalBytes)
' 保存文件到服务器
stream.SaveToFile "d:\myfile.png", 2 ' 2表示覆盖已有文件
stream.Close
Set stream = Nothing
Response.Write "文件上传成功!"已黑化的小白 Else
Response.Write "请选择要上传的文件!"已黑化的小白 End If
%>
如果我的回答解决了您的问题,请采纳!