.net6 + SqlConnection + uniapp APP端上传多图片功能

前端代码:

//html uniapp 使用uni-file-picker组件获取图片
<uni-forms-item required label="故障照片:" name="err_pictures" label-width="70" class="item-height">
	<view class="example-body">
		<uni-file-picker limit="3" @select="handleFileSelect"
			@delete="deleteFileSelect"></uni-file-picker>
	</view>
</uni-forms-item>

//js
//选取图片
handleFileSelect(event) {
	// 将新的对象数组合并到现有的 error_pictures 数组中
	this.formData.error_pictures = this.formData.error_pictures.concat(event.tempFilePaths);
}

/** 上传图片
* @param {Object} fileId
 */
uploadPhotos(fileId) {
	// TODO 必须将获取到的图片改成下面的格式提交到后端,不然后端是无法获取得到提交过去的图片数据,就算获取得到也只是二进制数据,无法获取图片相关信息
	const imgs = this.formData.error_pictures.map((item, index) => {
		return {
			name: "image" + index,
			uri: item, //注意这里是uri不是url,这里也不能出错,官方文档有写明
		}
	})
	uni.uploadFile({
		url: "接口url",
		files: imgs,
		header: {
			"Authorization": "Bearer" + getToken(),
			"Contant-Type": "multipart/form-data"
		},
		formData: {
			fileType: "Device", //一些相关参数
			fileId,
		},
		success: uploadFileRes => {
			console.log("uploadFileRes.data", JSON.parse(uploadFileRes.data))
		},
		fail: err => {
			console.log("uploadFileRes.err", err)
		}
	})
}

后端代码:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using System.Data;
using System.Data.SqlClient;
// 相关依赖,有些SaveDeviceImage里面可能没有用上
[HttpPost]
public async Task<TData<ActionResult>> SaveDeviceImage(IFormCollection formCollection)
{
    
    TData<ActionResult> obj = new();
    var fromData = Request.Form;
    string fileType = fromData["fileType"];
    string fileId = fromData["fileId"];
    var result = await UploadImage(formCollection, fileType);

    List<SqlParameter> listParam = new();
    try
    {
        string sql = @"INSERT INTO dbo.Mes_pictures(Url, DeviceFixingId) VALUES (@NewUrl, @DeviceFixingId)";
        listParam.Add(new SqlParameter("@NewUrl", string.Join(";", result)));
        listParam.Add(new SqlParameter("@DeviceFixingId", fileId));
        //这里是将图片的数据保存到数据库中
        int count = await SQLHelper.ExecuteNonQueryAsync(SQLHelper.mesConnectionString, sql, CommandType.Text, listParam.ToArray());
        obj.Tag = count > 0 ? 1 : 0;
    }catch (Exception ex)
    {
        obj.Message = ex.Message;
        return obj;
    }
   /* string base64String = Convert.ToBase64String(result.FilePath);

    obj.Data = $"data:image/jpeg;base64,{base64String}";*/
    return obj;
}
//保存图片到项目的某个文件夹下面
private async Task<List<string>> UploadImage(IFormCollection formCollection, string fileType)
{
    FormFileCollection files = (FormFileCollection)formCollection.Files;
    List<string> paths = new();
    for (int i = 0; i < files.Count; i++)
    {
        var file = files[i];
        if (file.Length < 0) break;
        var uploadsFolderPath = Path.Combine(Directory.GetCurrentDirectory(), $"uploads/{fileType}");
        if (!Directory.Exists(uploadsFolderPath))
        {
            Directory.CreateDirectory(uploadsFolderPath);
        }
		
        // 确保不覆盖现有文件  
        var uniqueFileName = Path.GetFileNameWithoutExtension(file.FileName) + "_" + Guid.NewGuid().ToString("N") + Path.GetExtension(file.FileName);
        //生成路径
        var filePath = Path.Combine(uploadsFolderPath, uniqueFileName);

        using (var stream = new FileStream(filePath, FileMode.Create))
        {
            await file.CopyToAsync(stream);
        }
        paths.Add(filePath);
    }
    return paths;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET是一个Web应用程序框架,可以用来开发各种类型的Web应用程序。而SQL是关系型数据库管理系统,用于存储和管理数据。因此,ASP.NET和SQL可以结合使用来实现用户登录功能。下面是一个简单的ASP.NET+SQL用户登录的示例: 1. 创建数据库 首先需要在SQL Server中创建一个数据库,用于存储用户信息和登录状态。可以使用SQL Server Management Studio等工具创建数据库,并创建一个名为“Users”的表,包括以下字段: - ID:用户ID,自增长整数类型,主键。 - Username:用户名,字符串类型。 - Password:密码,字符串类型。 2. 创建ASP.NET项目 打开Visual Studio,创建一个新的ASP.NET Web应用程序项目。选择“Empty”模板,并勾选“Authentication”选项,以生成基本的用户认证代码。 3. 编写登录页面 在项目中添加一个名为“Login.aspx”的Web窗体,并在页面中添加用户名和密码输入框、登录按钮等控件。在登录按钮的Click事件中编写登录逻辑,代码如下: ```csharp protected void btnLogin_Click(object sender, EventArgs e) { string username = txtUsername.Text; string password = txtPassword.Text; SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Users;Integrated Security=True"); SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Users WHERE Username=@username AND Password=@password", con); cmd.Parameters.AddWithValue("@username", username); cmd.Parameters.AddWithValue("@password", password); con.Open(); int count = (int)cmd.ExecuteScalar(); con.Close(); if (count > 0) { Session["username"] = username; Response.Redirect("Default.aspx"); } else { lblMessage.Text = "用户名或密码错误"; } } ``` 其中,SqlConnection表示与数据库的连接,SqlCommand表示执行SQL语句,ExecuteScalar方法用于执行查询并返回结果集中的第一行第一列的值。如果查询结果>0,则表示用户名和密码匹配,将用户名存储在Session中并跳转到默认页面;否则提示错误信息。 4. 编写默认页面 在项目中添加一个名为“Default.aspx”的Web窗体,可以在页面中显示当前登录用户的用户名,代码如下: ```csharp protected void Page_Load(object sender, EventArgs e) { if (Session["username"] != null) { lblUsername.Text = Session["username"].ToString(); } else { Response.Redirect("Login.aspx"); } } ``` 其中,Session["username"]用于获取登录时存储的用户名,如果不存在则跳转到登录页面。 至此,ASP.NET+SQL用户登录功能已经完成。需要注意的是,这只是一个简单的示例,实际应用中需要对用户输入进行验证和加密,以确保用户信息的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值