我正在尝试将图像路径数据库和图像本身保存到项目中的文件夹[关闭]

Posted

技术标签:

【中文标题】我正在尝试将图像路径数据库和图像本身保存到项目中的文件夹[关闭]【英文标题】:I am trying to save Image path database and the image itslef to a folder in project [closed] 【发布时间】:2021-11-17 17:30:55 【问题描述】:

我正在开发 web api,而且我是 API 的新手,因此我很难跟上我的项目,因为我创建了两个项目,一个具有前端,另一个具有后端,并且保存图像到数据库的路径后,我想在其中保存图像的文件夹在我的前端项目中。

这是我在前端项目中编写的 ajax,这个 ajax 会命中我的控制器,该控制器位于我的后端项目中:

$('.empOfficialDetails').click(function (ev) 
    ev.preventDefault();

    var data = new Object();
    data.UserName = $('#username').val();
    data.UPassword = $('#userpass').val();
    data.OfficialEmailAddress = $('#officialemail').val();
    data.Departments = $('#departments :selected').text();
    data.Designation = $('#designation :selected').text();
    data.RoleID = $('#role').val();
    data.Role = $('#role :selected').text();
    data.ReportToID = $('#reportToID').val();
    data.ReportTo = $('#reportTo :selected').text();
    data.JoiningDate = $('#joindate').val();
    data.IsAdmin = $('#isAdmin :selected').val() ? 1 : 0;
    data.IsActive = $('#isActive :selected').val() ? 1 : 0;
    data.IsPermanent = $('#isPermanent :selected').val() ? 1 : 0;
    data.DateofPermanancy = $('#permanantdate').val();
    data.HiredbyReference = $('#hiredbyRef :selected').val() ? 1 : 0;
    data.HiredbyReferenceName = $('#refePersonName').val();
    data.BasicSalary = $('#basicSalary').val();
    data.CurrentPicURL = $('.picture').val();

    if (data.UserName && data.UPassword && data.OfficialEmailAddress && data.Departments && data.Designation && data.Role && data.IsAdmin && data.IsPermanent) 
        $.ajax(
            url: 'http://localhost:1089/api/Employee/EmpOfficialDetails',
            type: "POST",
            dataType: 'json',
            contentType: "application/json",
            data: JSON.stringify(data),
            beforeSend: function () 
                $("#dvRoomsLoader").show();
            ,
            complete: function () 
                $("#dvRoomsLoader").hide();
            ,
            success: function (data) 
                var ID = parseInt(data);
                if (ID > 0) 
                    //var id = data;
                    $(".HiddenID").val(data);
                    //var id = $(".HiddenID").val();
                    $('#official').css('display', 'block');
                    $('#official').html("Employees Official details added successfully...!");
                    $('#official').fadeOut(25000);
                    $("#dvRoomsLoader").show();

                    $('.empOfficialDetails').html("Update &nbsp; <i class='fa fa-angle-right rotate-icon'></i>");
                
                else 
                    $('#official').find("alert alert-success").addClass("alert alert-danger").remove("alert alert-success");
                
            ,
            error: function (ex) 
                alert("There was an error while submitting employee data");
                alert('Error' + ex.responseXML);
                alert('Error' + ex.responseText);
                alert('Error' + ex.responseJSON);
                alert('Error' + ex.readyState);
                alert('Error' + ex.statusText);
            
        );
        
    
    return false;

);

请告诉我我应该以什么形式从 ajax 发送图像以及如何因为目前我的 Current PicUrl 仅作为字符串传递,并且在数据库中它看起来像这样 C:\fakepath\access-matrix-design.PNG,我希望整个图像通过 ajax 传递并与它的路径一起保存在数据库中

这是我的后端项目的控制器中的方法:

public int Emp_OfficialDetails(Employee emp)
    
        //SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AmanraHRMS"].ConnectionString);
        var con = DB.getDatabaseConnection();
        SqlCommand com = new SqlCommand("sp_InsEmpOfficialDetails", con);
        com.CommandType = CommandType.StoredProcedure;

        #region Employee Official Details Insert Code block

        com.Parameters.AddWithValue("@UserName", emp.UserName);
        com.Parameters.AddWithValue("@pass", emp.UPassword);
        com.Parameters.AddWithValue("@OfficialEmailAddress", emp.OfficialEmailAddress);
        com.Parameters.AddWithValue("@Department", emp.Departments);
        com.Parameters.AddWithValue("@Role", emp.Role);
        com.Parameters.AddWithValue("@IsAdmin", Convert.ToBoolean(emp.IsAdmin));
        com.Parameters.AddWithValue("@Designation", emp.Designation);
        com.Parameters.AddWithValue("@ReportToID", emp.ReportToID);
        com.Parameters.AddWithValue("@ReportTo", emp.ReportTo);
        com.Parameters.AddWithValue("@JoiningDate", Convert.ToDateTime(emp.JoiningDate));
        com.Parameters.AddWithValue("@IsPermanent", Convert.ToBoolean(emp.IsPermanent));
        com.Parameters.AddWithValue("@DateofPermanancy", Convert.ToDateTime(emp.DateofPermanancy));
        com.Parameters.AddWithValue("@IsActive", Convert.ToBoolean(emp.IsActive));
        com.Parameters.AddWithValue("@HiredbyReference", Convert.ToBoolean(emp.HiredbyReference));
        com.Parameters.AddWithValue("@HiredbyReferenceName", emp.HiredbyReferenceName);
        com.Parameters.AddWithValue("@BasicSalary", emp.BasicSalary);
        com.Parameters.AddWithValue("@CurrentPicURL", emp.CurrentPicURL);

        #endregion

        EmployeeImage(emp, emp.CurrentPicURL);

        var ID = com.ExecuteScalar();
        com.Clone();
        return Convert.ToInt32(ID);
    

    //Ajax call hit this method from AddEmployee page
    [Route("api/Employee/EmpOfficialDetails")]
    [HttpPost]
    public int? EmpOfficialDetails(Employee emp)
    
        IHttpActionResult ret;
        try
        
            var id = Emp_OfficialDetails(emp);
            return id;
        
        catch (Exception ex)
        
            ret = InternalServerError(ex);
        
        return null;
    

如您所见,我正在调用我创建的 EmployeeImage 来保存和处理图像但我不知道如何将参数传递给此方法因为HttpPostedFileBase,下面是我处理图片并保存图片路径的方法:

 public void EmployeeImage(Employee emp, HttpPostedFileBase CurrentPicURL)
    
        var allowedExtensions = new[]  ".Jpg", ".png", ".jpg", "jpeg" ;
        var fileName = Path.GetFileName(CurrentPicURL.FileName);
        var ext = Path.GetExtension(CurrentPicURL.FileName); //getting the extension(ex-.jpg)  

        byte[] bytes;
        using (BinaryReader br = new BinaryReader(CurrentPicURL.InputStream))
        
            bytes = br.ReadBytes(CurrentPicURL.ContentLength);
        

        if (allowedExtensions.Contains(ext)) //check what type of extension  
        
            string name = Path.GetFileNameWithoutExtension(fileName); //getting file name without extension  
            string myfile = name + "_" + ext; //appending the name with id  
            var path = Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath("~/assets/img/profiles/employeeImages"), myfile); // store the file inside ~/project folder(Img) 


            CurrentPicURL.SaveAs(path);
        
    

请告诉我如何在 EmpDetails 方法中调用此方法并将 CurrentPicURL 作为参数传递给此方法,以及此路径 "~/assets/img/profiles/employeeImages" 我是指的是位于我的前端项目中

非常感谢我获得的所有帮助 谢谢

【问题讨论】:

使用 Google 查找有关如何执行此操作的教程。 @IanKemp 我已经尝试过,但效果不佳,找不到解决方案 我不确定你在问什么——从你发布的代码来看,假设它有效,你应该在byte[] bytes 中拥有上传文件的内容,不是吗?你想做什么?什么不工作? @ThomasBonini 在我的代码中说 EmployeeImage(emp, emp.CurrentPicURL) 它不工作的行是一个错误,因为我不知道如何传递参数,因为 CurrentPicURL 是图像在 EmployeeImage() 方法中作为 HttpPostedFileBase 处理的参数,我不知道如何传递 httppostedfilebase 参数 【参考方案1】:

$('.picture').val() 将为您提供文件路径和名称 (C:\fakepath\access-matrix-design.PNG)

如果要获取文件对象,请使用$('.picture')[0].files[0]

【讨论】:

以上是关于我正在尝试将图像路径数据库和图像本身保存到项目中的文件夹[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

“无法将图像数据写入路径” - Laravel 图像干预

将 NSImage 保存到路径不起作用

使用 laravel 将裁剪后的图像保存在 public/uploads 文件夹中

将图像文件上传到服务器 asp.net

加载保存到文档目录的图像只能工作一次,然后永远不会再次加载

DreamFactory:如何将图像上传到文件服务器并将图像的路径保存在数据库中?