上传文件wcf [重复]

Posted

技术标签:

【中文标题】上传文件wcf [重复]【英文标题】:upload file wcf [duplicate] 【发布时间】:2011-12-09 21:46:40 【问题描述】:

我将创建一个 WCF,用于将图像或 pdf 文件等文件上传到服务器。 如何创建可以处理此功能的服务? 我试图用谷歌搜索它,但大多数文章都告诉我使用 Stream 作为服务参数。但我想要的是使用 byte[] (array) 作为文件内容。因为,这个服务不仅仅是使用.nte框架访问,还使用了其他技术,如php、java、objective-c等。

有什么帮助吗?

【问题讨论】:

字节数组不是文件。应该编辑这个问题的主题以反映发布字节数组的愿望。它具有误导性。 【参考方案1】:

似乎流媒体是您唯一的选择。看这个 [MSDN example]

看到这个问题: How to upload a file to a WCF Service?

你可以看看这篇文章: http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx

它只讨论设置 WCF 服务以接收任意数据,您可以从任何客户端(php、java 等)进行 POST

【讨论】:

【参考方案2】:

创建一个接受byte[]作为参数的WCF服务方法:

[OperationContract]
public void ReceiveByteArray(byte[] byteArray)  ... 

【讨论】:

这不适用于大文件。使用Streaming message transfer 更好。按要求使用字节数组可能是个坏主意。也许在 WCF 服务旁边使用 http put 处理程序可能是个好主意 yozora 想在各种平台上使用它,解决方案并不理想,但可以在 90% 的情况下提供帮助,其余可能需要智能上传器...【参考方案3】:

创建一个接受文件流的 WCF 服务方法。

    使用文件上传控件可以执行任务 在客户端站点上创建一个 Temp 文件夹。

这里是代码...

string fileextension = null, FileName = null;

try

    if (FileUpload1.HasFile)
    

        ITransferFile clientUpload = new TransferFileClient();
        RemoteFileInfo uploadRequestInfo = new RemoteFileInfo();
        fileextension = Path.GetExtension(FileUpload1.PostedFile.FileName);

        FileUpload1.PostedFile.SaveAs(Server.MapPath(Path.Combine("~/TempFolder/", FileName + fileextension)));
        System.IO.FileInfo fileInfo = new System.IO.FileInfo(Server.MapPath("~/TempFolder/") + FileName + fileextension);

        using (System.IO.FileStream stream = new System.IO.FileStream(fileInfo.FullName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
        
            uploadRequestInfo.FileName = FileUpload1.PostedFile.FileName;
            uploadRequestInfo.Length = fileInfo.Length;
            uploadRequestInfo.FileByteStream = stream;
            clientUpload.UploadFile(uploadRequestInfo);
        

    



catch (Exception ex)

    System.Web.HttpContext.Current.Response.Write("Error : " + ex.Message);

finally

    if (File.Exists(Server.MapPath("~/TempFolder/") + FileName + fileextension))
    
        File.Delete(Server.MapPath("~/TempFolder/") + FileName + fileextension);
    

【讨论】:

以上是关于上传文件wcf [重复]的主要内容,如果未能解决你的问题,请参考以下文章

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

wcf rest 服务用于安卓和ISO调用2-------文件上传

AJAX 文件上传到 WCF 服务的工作示例

Android将文件作为ByteArray上传到WCF REST服务

从 Xamarin Android 应用程序崩溃将大文件上传到 WCF

如何在 C# 中正确使用 WCF REST API 上的 Stream 将文件(图像/视频/等)上传到服务器?