繁体   English   中英

将Excel文件上传到Web服务器

[英]Upload Excel file to web server

我试图使用文件流通过UWP c#将文件上传到Web服务器,但是它总是给我一个错误,即当我尝试在http://example.com/httpdocs/content上上传时不允许使用405方法。 即使出于测试目的,我也尝试在本地主机上上传,但还是没有运气。 有帮助吗?

代码:

 public async Task<bool> Upload(StorageFile fileName)
    {
        HttpMultipartFormDataContent form = new HttpMultipartFormDataContent();
        cts = new CancellationTokenSource();

        using (IInputStream fileStream = await fileName.OpenSequentialReadAsync())
        {
            HttpStreamContent content = new HttpStreamContent(fileStream);               
            form.Add(content, "premier", fileName.Name);

            using (HttpClient client = new HttpClient())
            {
                using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, new Uri("http://example.com/httpdocs/content")))
                {
                    request.Content = form;
                    request.Headers.TryAppendWithoutValidation("Content-Type", "application/x-www-form-urlencoded");                       
                    HttpResponseMessage response = await client.SendRequestAsync(request).AsTask(cts.Token);
                    var result = response.Content.ReadAsStringAsync().GetResults();
                }                   
            }
        }

        return true;
    }

Hye,在尝试了很多之后,我找到了这段代码,它可以完美地工作。 稍作修改后,该请求现在将发送到aspx页面,即http://example.com/abc.aspx 如果您想发送高mb的excel文件数据,则只需在Math.Min(4096,(int)fileStream.Length)中相应地更改4096

客户端代码-

   public static async Task<string> UploadFileEx(string uploadfile, string 
   url, string fileFormName, string contenttype, NameValueCollection 
   querystring, CookieContainer cookies)
    {
        try
        {
            if ((fileFormName == null) ||
                (fileFormName.Length == 0))
            {
                fileFormName = "file";
            }

            if ((contenttype == null) ||
                (contenttype.Length == 0))
            {
                contenttype = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            }
            string postdata;
            postdata = "?";
            if (querystring != null)
            {
                foreach (string key in querystring.Keys)
                {
                    postdata += key + "=" + querystring.Get(key) + "&";
                }
            }
            Uri uri = new Uri(url + postdata);


            string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
            HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
            webrequest.CookieContainer = cookies;
            webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
            webrequest.Method = "POST";

            // Build up the post message header
            StringBuilder sb = new StringBuilder();
            sb.Append("--");
            sb.Append(boundary);
            sb.Append("\r\n");
            sb.Append("Content-Disposition: form-data; name=\"");
            sb.Append(fileFormName);
            sb.Append("\"; filename=\"");
            var sd = sb.Append(Path.GetFileName(uploadfile));
            sb.Append("\"");
            sb.Append("\r\n");
            sb.Append("Content-Type: ");
            sb.Append(contenttype);
            sb.Append("\r\n");
            sb.Append("\r\n");

            string postHeader = sb.ToString();
            byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);

            // Build the trailing boundary string as a byte array
            // ensuring the boundary appears on a line by itself
            byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

            FileStream fileStream = new FileStream(uploadfile, FileMode.Open, FileAccess.Read);
            long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length;
            //  webrequest.ContentLength = length;
            webrequest.Headers[HttpRequestHeader.ContentLength] = length.ToString();

            //Stream requestStream = webrequest.GetRequestStream();
            Stream requestStream = await webrequest.GetRequestStreamAsync();

            // Write out our post header
            requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);

            // Write out the file contents
            byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))];
            int bytesRead = 0;
             while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                requestStream.Write(buffer, 0, bytesRead);

            // Write out the trailing boundary
            requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
            WebResponse response = await webrequest.GetResponseAsync();
            Stream s = response.GetResponseStream();
            StreamReader sr = new StreamReader(s);

            return sr.ReadToEnd();
        }

        catch (Exception e)
        {
            e.ToString();
        }
        return null;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM