将文件发送到Web服务(asmx),以便将其保存在服务器上

本文关键字:保存 服务器 存在 asmx 文件 Web 服务 | 更新日期: 2023-09-27 18:19:41

更新问题:

我正在尝试创建一个将主题、内容和文件传递到Web服务的表单。这就是我到目前为止所做的,我想知道是否有人能告诉我我是否朝着正确的方向前进,以及如何做我在asmx文件的评论中强调的部分

HTML:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server"></script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form action="files.asmx/CaptureFile" enctype="multipart/form-data" method="post">
        <input type="text" name="subject" /><br />
        <input type="text" name="content" /><br />
        <input type="file" name="filedata" /><br />
        <input type="submit" value="Upload" />
    </form>
</body>
</html>

Web服务:

<%@ WebService Language="C#" Class="Files" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Script;
using System.Web.Script.Services;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
[ScriptService]
public class Files : WebService {
    SqlConnection connection;
    SqlCommand command;
    SqlDataReader reader;
    int intAffectedRows;
    [WebMethod()]
    public int CaptureFile(string subject, string content, byte[] filedata)
    {
        // somehow reconstruct the filedata to an actual file saved on the server
        // save subject, content, and filename to database
        using (connection = new SqlConnection(ConfigurationManager.AppSettings["connString"]))
        {
            using (command = new SqlCommand("query to save subject content and filename_only to database", connection))
            {
                command.Parameters.Add("@subject", SqlDbType.VarChar, 255).Value = subject; 
                command.Parameters.Add("@content", SqlDbType.VarChar, 255).Value = content;
                command.Parameters.Add("@filedata", SqlDbType.VarChar, 255).Value = filedata; // need to save filename here, not file binary data
                connection.Open();
                intAffectedRows = command.ExecuteNonQuery();
                connection.Close();
            }
        }
        return intAffectedRows;
    }
}

----------

原始问题:

我知道如何将标准文本发送到Web服务器,对其进行处理,然后发回一些东西,即

[WebMethod()]
public List<Notification> GetNotification(int id)
{
    // do processing here
    // return something back
    return "Notification text";
}

我的ajax看起来是这样的:

$.ajax({
    type: 'POST',
    url: '/webservices/notifications.asmx/GetNotification',
    data: '{id: ' + number + '}',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',

如何发送文件?这个文件将是一个.pdf或.doc文件,这样我就可以把它和一些文本一起保存到服务器上。所以,我想要一个主题的文本框,选择文件按钮/textbox来选择文件,还有一个提交按钮。当填写完这两个文本框并单击提交按钮时,它应该将主题和文件发送到Web服务,Web服务会将主题和文档位置保存到数据库中,并将实际文件保存到服务器中。

另外,我是在intranet环境下开发的,IE完全信任本地intranet。

将文件发送到Web服务(asmx),以便将其保存在服务器上

如何发送文件?

您不能简单地使用AJAX发送文件,因为使用javascript,您无法访问客户端计算机上的文件系统,因此无法获取文件内容。如果您想将文件发送到web服务器,可以使用带有文件输入的<form>和发布到服务器端脚本的enctype="multipart/form-data"。然后,该脚本可以调用web服务,并将文件内容作为字节数组进行传输。