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

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

有什么帮助吗?

【问题讨论】:

  • 字节数组不是文件。应该编辑这个问题的主题以反映发布字节数组的愿望。它具有误导性。

标签: c# .net wcf upload


【解决方案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 服务方法。

    1. 使用文件上传控件可以执行任务
    2. 在客户端站点上创建一个 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-16
      • 2011-09-11
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多