首页 新闻 赞助 找找看

windows8 app metro如何实现文件上传

0
悬赏园豆:50 [已解决问题] 解决于 2012-09-14 10:19

我的客户端上传代码:
using (var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = System.Net.DecompressionMethods.GZip | 
                    System.Net.DecompressionMethods.Deflate,MaxRequestContentBufferSize=int.MaxValue }))
                {
                    HttpResponseMessage res;
                    if (App._StorageFile != null)
                    {
                        StorageFile _storageFile = App._StorageFile;
                        string fileName = _storageFile.Name;


                        IRandomAccessStream readStream = await _storageFile.OpenAsync(FileAccessMode.Read);
                        Stream stream = readStream.AsStreamForRead();

                        MultipartFormDataContent form = new MultipartFormDataContent();

                        StreamContent streamContent = new StreamContent(stream, (int)readStream.Size);
                        streamContent.Headers.ContentType = new MediaTypeHeaderValue(FileOperate.GetContentType(fileName));
                        streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
                        streamContent.Headers.ContentDisposition.Name = "file";
                        streamContent.Headers.ContentDisposition.FileName = fileName;
                        streamContent.Headers.ContentLength = (long)readStream.Size;
                        form.Add(streamContent);

                        HttpRequestMessage requestMsg = new HttpRequestMessage();
                        requestMsg.Content = streamContent;
                        requestMsg.Content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");
                        requestMsg.Method = new HttpMethod("POST");
                        requestMsg.RequestUri = new Uri(api);
                        res = await client.SendAsync(requestMsg);//以异步操作将Get请求发送给指定URI

                    }
                    else
                    {
                        res = await client.GetAsync(api);//以异步操作将Get请求发送给指定URI
                    }

服务器端获取文件代码:
if (System.Web.HttpContext.Current.Request.Files.Count > 0)
                        {
}
客户端提交的参数都可以正常获取,唯独System.Web.HttpContext.Current.Request.Files.Count的值总是为0,不知为什么,请大牛指教,万分感谢!

xiaofoyuan的主页 xiaofoyuan | 初学一级 | 园豆:137
提问于:2012-09-13 17:33
< >
分享
最佳答案
0

因为你没把 Count 传上去。

不是有个 WebClient 可以直接 UploadFile 吗?你可以通过抓包看看它是如何把 Count 属性写在 header里的。

收获园豆:50
Launcher | 高人七级 |园豆:45045 | 2012-09-13 17:38

在win8中是使用httpClient替代webClient的,另外不知你说的Count指的是什么,是不是文件的数量?我查看了一下,streamContent.Headers中没有 Count属性

xiaofoyuan | 园豆:137 (初学一级) | 2012-09-14 08:50

@xiaofoyuan: 我知道没有。我的意思是在HTTP协议中,总会有一个地方需要把上传文件的个数记录下来传给服务器,很有可能是一个或多个Header 标记,以表示POST的是文件,并且有几个。你可以抓包看下使用 WebClient上传2个文件时,HTTP请求的HEADERS里面都有些什么。

Launcher | 园豆:45045 (高人七级) | 2012-09-14 09:09

@Launcher: 这个问题不再纠结了,我改用httpWebRquest可以正常发送和就收数据了,感谢您的指教!

xiaofoyuan | 园豆:137 (初学一级) | 2012-09-14 10:19

@xiaofoyuan: 你好,我最近也在做类似的功能, Win8有很多方式实现post multipart请求, 我都试了上文的方法和自己构造httprequest请求, 都有一些小错误。 不知可否共享一下你的实现代码以供参考?

ipondering | 园豆:200 (初学一级) | 2012-09-20 13:29
其他回答(1)
0

HttpRequestMessage后面的改成

var client = new HttpClient();
var response = await client.PostAsync(new Uri(api), form);

stoly | 园豆:202 (菜鸟二级) | 2015-10-10 17:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册