使用ajax和asp.net将文件保存到SQL Server数据库

问题描述 投票:1回答:1

我用ajax和asp.net将文件插入我的sqlserver2012数据库,我得到了错误结果,如下所示: 我的错误localhost:6446 syas:[object Object]

在HTML和ajax jquery中

$(document).ready(function () {
	$('#btn_upload').click(function () {
		var file = $('#uploadefile').get(0).files;
		var data = new FormData;
		data.append("upload", file[0]);

		$.ajax({
			type: "POST",
			method: 'POST',
			url: 'WebService1.asmx/insertFileupload',
			//contentType: 'application/json;charset=utf-8',
			data: data,
			contentType: false,
			processData:false,
			success: function (data) {
				alert('s');
			},
			error: function (err) {
				alert(err);
			}
		});
	});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="btn_upload" type="button" value="example" /><br />
<input id="uploadefile" type="file" />

我的WebService函数enter image description here

[WebMethod]
public void insertFileupload(attachment data)
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TesterConnectionString1"].ConnectionString);
    using (con)
    {
        SqlCommand cmd = new SqlCommand("attach_insert", con);
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter()
        {
            ParameterName = "@image",
            Value = data.image
        });

        con.Open();
        cmd.ExecuteNonQuery();
    }   
}
javascript jquery asp.net ajax web-services
1个回答
1
投票

将以下属性添加到webservice类

[System.Web.Script.Services.ScriptService]

除此之外,还要在webmethod中添加以下属性

[ScriptMethod]

如果上述更改仍然无效,请确保在web.config中添加了以下设置

<system.web>
<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

更新无需在upload方法中传递任何参数。请查看以下代码段。

WebService.asmx

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;

namespace WebApplication10
{
    /// <summary>
    /// Summary description for WebService1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {
        [ScriptMethod]
        [WebMethod]
        public void UploadFile()
        {
            if (HttpContext.Current.Request.Files.AllKeys.Any())
            {
                // Get the uploaded image from the Files collection
                var httpPostedFile = HttpContext.Current.Request.Files["UploadedImage"];

                if (httpPostedFile != null)
                {
                    //var fileSavePath = Path.Combine(Server.MapPath("upload"), httpPostedFile.FileName);
                    //  var file = ConvertToByteArray(fileSavePath);
                    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TesterConnectionString1"].ConnectionString);
                    using (con)
                    {
                        SqlCommand cmd = new SqlCommand("attach_insert", con);
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.Add("@image", SqlDbType.VarBinary,
                            (int)httpPostedFile.InputStream.Length).Value = httpPostedFile.InputStream;
                            con.Open();
                            cmd.ExecuteNonQuery();
                        }
                    }
                }
            }
            public byte[] ConvertToByteArray(string varFilePath)
            {
                byte[] file;
                using (var stream = new FileStream(varFilePath, FileMode.Open, FileAccess.Read))
                {
                    using (var reader = new BinaryReader(stream))
                    {
                        file = reader.ReadBytes((int)stream.Length);
                    }
                }
                return file;
            }
        }
    }

WebForm1.aspx的

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication10.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
    <form id="form1" runat="server">
        <div>

            <input id="btn_upload" type="button" value="example" /><br />
            <input id="uploadefile" type="file" />
        </div>
    </form>
</body>
<script type="text/javascript">
$(document).ready(function () {

    $('#btn_upload').on('click', function () {

      var data = new FormData();
      var files = $("#uploadefile").get(0).files;
      // Add the uploaded image content to the form data collection
      if (files.length > 0) {
           data.append("UploadedImage", files[0]);
      }

      // Make Ajax request with the contentType = false, and procesDate = false
      var ajaxRequest = $.ajax({
           type: "POST",
           url: "/WebService1.asmx/UploadFile",
           contentType: false,
           processData: false,
           data: data
           });

      ajaxRequest.done(function (xhr, textStatus) {
                    // Do other operation
             });
   });
});
</script>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.