如何把uni.uploadFile传到asp后端的数据保存成图片

如何把uni.uploadFile传到asp后端的数据保存成图片?我打开myfile.png发现出错

img

前端代码:

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
根据前端代码,可以看出是通过uni.uploadFile函数将选择的图片上传到后端ASP接口。后端代码中,通过Request.BinaryRead函数读取上传的文件内容,然后通过ADODB.Stream对象将文件保存到服务器。
根据前端代码,上传的文件名为'file',因此后端代码中需要通过'file'获取上传的文件对象。同时,需要注意保存文件的路径和文件名,可以根据实际情况进行修改。
下面是修改后的后端代码:

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

需要注意的是,ASP接口需要在服务器上运行,可以通过IIS等工具进行配置和部署。同时,需要根据实际情况修改保存文件的路径和文件名。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据您提供的代码,似乎您的ASP后端已经正确地接收到了前端上传的文件数据。但是您可能会遇到以下问题:

  1. 文件名不正确:根据您的后端代码,上传的文件将被保存为"d:\myfile.png"这个文件名。但是您的前端代码并没有指定上传的文件名,因此上传的文件名可能与您期待的文件名不同。

您可以在前端代码中使用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
        });
    }
})
  1. 上传的数据格式不正确:根据您的后端代码,上传的文件将被保存为二进制流。但是您需要将这个二进制流转换为图片文件才能正确地打开它。如果您直接用文本编辑器打开这个文件,可能会出现类似于“符号无法识别”的问题。

您可以在前端代码中使用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
        });
    }
})
  1. 文件保存的位置不正确:根据您的后端代码,上传的文件将被保存在"d:\myfile.png"位置。但是您需要确保您的web服务器有权限创建并写入文件到这个位置。

同时,您还需要确保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
%>

如果我的回答解决了您的问题,请采纳!