使用 HTML5 和/或 jQuery 将文件上传到 WCF 服务

Posted

技术标签:

【中文标题】使用 HTML5 和/或 jQuery 将文件上传到 WCF 服务【英文标题】:Uploading a file to WCF service using HTML5 and/or jQuery 【发布时间】:2012-01-30 19:46:48 【问题描述】:

我正在尝试仅使用 html5 和 javascript/jQuery 将文件上传到我的 WCF 服务。 WCF 服务是从 Windows 服务而不是 IIS 自托管的,所以我认为我不能使用 php 或 aspx 上传处理程序。这些文件是二进制文件而不是文本文件。

理想情况下,我想最终得到一个 .net 流对象,我可以在其中在本地(服务器端)写入文件。在这一点上,我只是在寻找非常非常基本的文件上传。

我目前可以进行 JSON 通信,但无法跳转到二进制文件。目前我已经这么远了:

服务接口:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "SendFile")]
string SendFile(Stream stream);

服务实现:

public string SendFile(Stream stream)
        
            // this works for strings, but i want a FileStream
            StreamReader reader = new StreamReader(stream);
            string data = reader.ReadToEnd();

            return data;
        

HTML:

 <input type="file" id="fileInput" onchange='sendFile();' />

JavaScript / jQuery:

 function sendFile() 
        submitButton.disabled = true; ;
        setInnerText("sending file...");
        var file = document.getElementById('fileInput').files[0];
        var url = "http://10.0.1.9:8732/RainService/SendFile";
        $.ajax(
            url: url,

            type: "POST",
            data: file,
        );
    

在 Chrome 控制台中,我收到“非法调用”错误。我可以使用data: file.name,但这会很好。我需要发送文件内容流,以便在服务器端重建它。

有什么想法吗?

【问题讨论】:

【参考方案1】:

您不能通过 ajax 发送文件。 您必须使用集成了 SWF 对象的插件,您可以在其中上传某些文件类型(您定义什么)。

所以,我可以建议你使用 uploadify(我在 MVC3 的项目中使用了它)。

或者你可以使用: http://www.codeproject.com/KB/WCF/WCFDownloadUploadService.aspx

http://www.codeproject.com/KB/WCF/UploadlargeFilesWCFHTTP.aspx 获取更多文档

当然,google 可以帮你more

【讨论】:

以上是关于使用 HTML5 和/或 jQuery 将文件上传到 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

jquery 上传空间uploadify使用笔记

jquery文件上传控件 Uploadify

jquery文件上传控件 Uploadify

上传时的默认文件格式。 jQuery 或 Javascript

html5分割上传实现超大文件无插件网页上传插件

转HTML5 jQuery图片上传前预览