John Iliya Ответов: 1

Как сохранить сведения о форме с путем к изображению в sqlserver и изображение в базе данных


я хочу иметь возможность отправить форму в мою базу данных sqldatabase и сохранить изображение в папке и путь в базе данных

Что я уже пробовал:

.directive("fileInput",function($parse){
                return {
                    restrict: "A",
                    link: function (scope,elem,attrs) {
                        elem.bind("change", function () {
                            $parse(attrs.fileInput).assign(scope, elem[0].files);
                            scope.$apply();
                        });
                    }
                }
            })
.controller("imageUploadPracticeController", function ($scope,$http,$timeout) {
                var vm = this;
                vm.loading = false;
                vm.msg = false;
                vm.error = false;
               // read();

                vm.imageUpload = function (event) {
                    var files = event.target.files;//filelist object
                    var file = files[files.length - 1];
                    vm.file = file;
                    var reader = new FileReader();
                    reader.onload = vm.imageIsLoaded;
                    reader.readAsDataURL(file);
                }
                vm.imageIsLoaded = function (e) {
                    $scope.$apply(function () {
                        vm.step = e.target.result;
                    });
                }

                vm.btnUpload = function () {
                    vm.loading = true;
                    var request = $http({
                        url: '../services/svImageUpload.asmx/insert',
                        method: 'POST',
                        data: { city: vm.City, country: vm.Country, flag: vm.file.name },
                        //transformRequest:angular.identity,
                        headers: {'content-type':undefined}
                    });
                    request.then(function (response) {
                        read();
                        vm.loading = false;
                        vm.error = false;
                        vm.hurray = response.data;
                        vm.msg = true;
                    }, function (error) {
                        vm.error = true;
                        vm.error = error.data;
                        vm.loading = false;
                        vm.msg = false;
                    });
                    //console.log(vm.City + ' ' + vm.Country + ' ' + vm.file.name);
                }
                var read = function () {
                    var request = $http("../services/svImageUpload.asmx/GetAllFiles")
                                  .then(function (response) { vm.imgUploads = response.data; });
                }
                vm.closeSuccessMsg = function () {
                    vm.loading = false;
                    vm.msg = false;
                    vm.error = false;
                    $("#txtCity").val('');
                    $("#txtCountry").val('');
                }
                vm.closeErrorMsg = function () {
                    vm.loading = false;
                    vm.msg = false;
                    vm.error = false;
                    $("#txtCity").val('');
                    $("#txtCountry").val('');
                }
            });


[WebMethod]
        public string insert(string city,string country,string flag)
        {
            try
            {
                using(SqlConnection conn =new SqlConnection(clsMain.sqlconnstring))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand("spInsertUploadPicture", conn);
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@city", city);
                    cmd.Parameters.AddWithValue("@country",country);
                    cmd.Parameters.AddWithValue("@imgpath", string.Format("../imageUploads/{0}",flag));
                    cmd.ExecuteNonQuery();
                    return "Record Uploaded Successfully";
                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }

[no name]

Я хочу иметь возможность ответить на любой ваш вопрос.

ZurdoDev

Это очень легко сделать. Какой у вас вопрос?

1 Ответов

Рейтинг:
0

Robert Welliever

На стороне клиента у вас есть обработчик load complete для вашего образа (я предполагаю, что это тот образ, который вы хотите получить в базе данных):

vm.imageIsLoaded = function (e) {
    $scope.$apply(function () {
        vm.step = e.target.result;
    });
}

Вы хотите отправить это е.цель.результат к серверу в вашем сервисном вызове. Оказавшись там, вы разбираете начальный текст,который просто идентифицирует тип носителя. Тогда у вас есть совершенно хорошее изображение в виде строки base64. Вы можете сохранить его в базе данных в виде текста или продолжить преобразование в изображение и сохранить его таким образом:

string imageString = ThisValueIsETargetResultFromClient; // e.target.result;
imageString = imageString.Substring(imageString.IndexOf(",") + 1); // remove meta
// Now can save imageString to database as base 64 string, or

using(MemoryStream ms = new MemoryStream(Convert.FromBase64String(imageString)))
{
      System.Drawing.Image image = System.Drawing.Bitmap.FromStream(ms);
      // Now can save image to database as Image file
}