您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> .NET >> 不用上传控件实现httpWebRequest 上传文件

不用上传控件实现httpWebRequest 上传文件

来源:网络整理     时间:2016/6/28 11:54:02     关键词:

关于网友提出的“ 不用上传控件实现httpWebRequest 上传文件”问题疑问,本网通过在网上对“ 不用上传控件实现httpWebRequest 上传文件”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 不用上传控件实现httpWebRequest 上传文件
描述:

            WebClient myWebClient = new WebClient();
            myWebClient.UploadFile("http://localhost:12880/FileReceive.aspx", "POST", @"E:\123.PDF"); 用这段代码,总是报:远程服务器返回错误: (500) 内部服务器错误。 不用上传控件,怎么实现post上传啊,请教各位大侠。网上大部分都是用上传控件的。


解决方案1:

LZ,你打算什么都不用,能解决问题吗?还有就是你的那个是绝对路径,在客户端访问能找到路径吗?

解决方案2:

你可以添加个Web服务,然后调用。。。就OK

解决方案3:

引用 12 楼 sp1234 的回复:
调试你的http://localhost:12880/FileReceive.aspx,别的没有什么用。 处理post文件数据,怎么用aspx呢?又不是要处理一个复杂界面。比较合适地是使用ashx。 你的这个url上看根本没有url参数,什么叫做“是用Request["???"] 来取值的”?看不懂。获取post的文件不是使用C# code Request.Files[0] 这种方……
是啊,说的是。我考虑复杂了。呵呵。 服务端:
var filepath = context.Server.MapPath("~/FileUploads");
var filename = context.Request.Files[0].FileName;
context.Request.Files[0].SaveAs(Path.Combine(filepath, filename));
就可以了。 客户端:
var data = client.UploadFile("http://localhost:31519/FileUploadHandler.ashx", file);
var result = System.Text.Encoding.UTF8.GetString(data);
Console.WriteLine(result);
解决方案4:

又看了下直接POST,application/octet-stream 也可以。 但 UploadFile 不能用了,它默认把request设为 multipart-data 提交了。 示例: 服务端,创建一个 Generic Handler 处理请求: (文件名只能通过 Header 传)


public class FileUploadHandler : IHttpHandler
{
    private static object _lockObj = new object();
    public void ProcessRequest(HttpContext context)
    {
        if (context.Request.ContentType == "application/octet-stream")
        {
            var filepath = context.Server.MapPath("~/FileUploads");<>
            var filename = context.Request.Headers["FileName"];
            filepath = Path.Combine(filepath, filename);             lock (_lockObj)             {                 if (File.Exists(filepath))
                    File.Delete(filepath);
                int len = 0;                 byte[] buffer = new byte[1024];
                using (var fs = new FileStream(filepath, FileMode.CreateNew))
                {                     do
                    {                         len = context.Request.InputStream.Read(buffer, 0, buffer.Length);                         fs.Write(buffer, 0, len);                     } while (len > 0);                 }             }             context.Response.ContentType = "text/plain";
/>             context.Response.Write("success");         }         else         {             context.Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;             context.Response.ContentType = "text/plain";             context.Response.Write("Failed");         }          
    }
    public bool IsReusable     {
        get
        {             return false;         }     }
}
客户端:
using (var client = new WebClient())
    var file = "E:\\test.png";
    client.Headers.Add("FileName", Path.GetFileName(file));     client.Headers.Add("Content-Type", "application/octet-stream");
    var data = client.UploadData("http://localhost:31519/FileUploadHandler.ashx", "POST", File.ReadAllBytes(file));
    var result = System.Text.Encoding.UTF8.GetString(data);     Console.WriteLine(result); }
解决方案5:

调试你的http://localhost:12880/FileReceive.aspx,别的没有什么用。 处理post文件数据,怎么用aspx呢?又不是要处理一个复杂界面。比较合适地是使用ashx。 你的这个url上看根本没有url参数,什么叫做“是用Request["???"] 来取值的”?看不懂。获取post的文件不是使用

Request.Files[0]
这种方式取得文件么? 解决方案6:

说来说去,http://localhost:12880/FileReceive.aspx 是你自己实现的。
不是可以debug吗?看看是少了什么。
/>
另外 http://localhost:12880/FileReceive.aspx 这个页面里没有 FileUpload 控件? 服务端怎么取的? Request["???"] 
如果没有上传控件那么就不能用 WebClient.UploadFile 了, 直接用 WebClient.UploadValues
Key自己定义, Value则是byte[]

解决方案7:

500 发生在服务端,在web侧debug下。

解决方案8:

是不是文件太大了?


以上介绍了“ 不用上传控件实现httpWebRequest 上传文件”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2128504.html

相关图片

相关文章