通过Web服务上传包含文件的对象

时间:2012-09-06 15:17:55

标签: json winforms web-services asp.net-mvc-4 file-upload

我正在使用Asp.Net MVC4编写Web服务。我正在为客户端使用WinForms。 我已经实现了一个能够返回Items列表的SearchController。

[HttpGet]
public IEnumerable<Shared.Item> ByTag(string search)
{
    ModelDbContext db = ModelDbContext.Current;
    db.Items.Load();
    //find some items....
    return itemList;
}

我这样称呼它:

public Task<IEnumerable<Item>> SearchByTag(string tag)
        {

            client.BaseAddress = serviceAdress;
            var getStuffCall=client.GetAsync("Search/ByTag/" + tag);
            var r=getStuffCall.ContinueWith(
                t =>t.Result.IsSuccessStatusCode? (t.Result.Content.ReadAsAsync<IEnumerable<Item>>().Result):new List<Item>()
                );
            return r;
        }

这很好用。现在我想将一个Item上传到服务器。问题是,我的类型项是结构化的,还包含文件列表和图片列表。据我所知,这不适用于json-object。或者我可以以某种方式包装/编码我的文件和图片吗?

2 个答案:

答案 0 :(得分:1)

从WinForms,您可能会想要使用WebClient,这允许您将多部分表单POST到服务器。

请记住,HTTP实际上并不是为文件传输而设计的,所以如果你有一大堆要推送的文件,请考虑一下。

最后在控制器上,您将要执行以下操作:How To Accept a File POST

有一些相关的链接和一些好的样本。

希望这会有所帮助。

答案 1 :(得分:0)

你将不得不自己编写一堆代码,或者使用jQuery插件,例如Uploadify。原因是XMLHttpRequest不允许通过Ajax编码/上传文件。这个插件使用了几个已知的解决方案/解决方案/故障转移,使它适合您。

有了这个,您可以考虑拨打两个电话,一个用于您的对象,另一个用于您希望推送到服务器的文件/图像。

干杯。