是否可以通过Jquery .ajax()方法使用path获取webmethod中的文件?

时间:2015-05-19 07:48:44

标签: javascript c# jquery asp.net ajax

据我所知,不可能使用Jquery / Ajax调用将文件发送到webmethod。但是,如果我发送文件的路径怎么办?并使用该路径获取webmethod中的文件?

客户端:

 $.ajax({
            type: "POST",
            url: "Default.aspx/UploadFile",
            data: JSON.stringify({ name: $('#fileData').val(); }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: true,
            success: function (data, status) {
                console.log("CallWM");
                alert(data.d);
            },
            failure: function (data) {
                alert(data.d);
            },
            error: function (data) {
                alert(data.d);
            }
        });

的WebMethod:

 [WebMethod]
    public static string UploadFile(string name)
    {
        byte[] buffer;
        FileStream fileStream = new FileStream(@"D:\Untitled.png", FileMode.Open, FileAccess.Read);
        try
        {
            int length = (int)fileStream.Length;  // get file length
            buffer = new byte[length];            // create buffer
            int count;                            // actual number of bytes read
            int sum = 0;                          // total number of bytes read

            // read until Read method returns 0 (end of the stream has been reached)
            while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
                sum += count;  // sum is a buffer offset for next reading
        }
        finally
        {
            fileStream.Close();
        }

        return "a";
    }

这可行吗?我认为大多数现代浏览器都不会让你获得文件的真实路径。有解决方法吗?

4 个答案:

答案 0 :(得分:1)

不,这不行。 嗯,你说的是两件不同的事情。您发送的文件路径将在服务器上解析。如果要上传文件,则需要从客户端发送。你混了很多。

想象一下,您尝试将其发送到服务器:C:\Users\yourName\Test.txt, 你在哪里服务器会尝试找到该文件?服务器将搜索他的本地驱动器。

尝试使用默认方式上传文件。也许有一些jQuery插件,你在后台提出请求。互联网将为您的场景提供大量教程。只是谷歌一点点。

答案 1 :(得分:0)

不,这不起作用。如果你想在没有回复整个页面的情况下上传文件,你可以使用iframe并将你提交的表单的目标设置为这个iframe

答案 2 :(得分:0)

不确定,但您可以尝试 HttpPostedFileBase

foreach (string one in Request.Files)
{
     HttpPostedFileBase file = Request.Files[one];
     if ((file != null) && (file.ContentLength > 0) &&    !string.IsNullOrEmpty(file.FileName))
     {
         string fileName = file.FileName;
         string fileContentType = file.ContentType;
         byte[] fileBytes = new byte[file.ContentLength];
         BinaryReader b = new BinaryReader(file.InputStream);
         byte[] binData = b.ReadBytes(file.ContentLength);
     }
}

答案 3 :(得分:0)

我相信您可以将文件发送到网络方法,只是为了简化使用Base64的内容

将文件读取为字节,将字节转换为Base64,例如

$('.dropdown-button').dropdown();

然后你可以转换为Base64

var bytes = File.ReadAllBytes(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "filename.extension"));

然后在另一侧将收到的base64字符串转换为字节

var stringBase64=Convert.ToBase64String(bytes);

这就是全部