将文件发送到Asp.net
本文关键字:Asp net 文件 | 更新日期: 2023-09-27 18:12:36
我正在尝试测试一个可能的应用程序。它是一个ASP.net站点,将在其默认页面中接收xml文件。客户机将是一个应用程序,它将生成包含该文件的HTTP Post。
不涉及UI。
我制作了原型Asp。. Net Web应用程序(Framework 4.5.2)和一个Winform应用程序来运行它。
我已经尝试了所有方式的HTTP发布代码在Winform应用程序,但虽然WebApp默认。
这个包括:测试应用程序读取文件并张贴字符串。网页中的StreamReader在读取Request.InputStream.
时产生一个空字符串。WebClient。还是尝试。请求。
使用邮差和POST带参数的StreamReader场景工作。即。"opennode这是一个节点,closeode"产生一个xml字符串输出。
我应该提一下,我目前使用IDE来托管网页,以防这对行为有任何影响。
考虑到应用程序和站点之间自动传输的要求,解决这个问题的正确方法是什么?
我通常会提供一个web服务,但网站用户认为这是多余的,只是想用文件点击一个URL。
WebClient的应用程序代码如下。
private void OpenFile(string _file)
{
// WEBCLIENT TRY
using (WebClient client = new WebClient())
{
client.UploadFile("http://localhost:21726/Default.aspx", _file);
}
}
ASP。NET CODE 'Web Client Receive'跟随
private void ProcessData(HttpRequest request)
{
try
{
// WEB CLIENT RECEIVE ATTEMPT
foreach (string f in Request.Files.AllKeys)
{
HttpPostedFile file = Request.Files[f];
file.SaveAs("c:''inetpub''test''UploadedFiles''" + file.FileName);
}
catch (Exception ex)
{
string message = ex.Message;
throw;
}
}
网页更改为来自Microsoft Webclient的示例代码。还是例子(下图)。行为没有改变。所以它一定是WinApp Tester。
<%@ Import Namespace="System"%>
<%@ Import Namespace="System.IO"%>
<%@ Import Namespace="System.Net"%>
<%@ Import NameSpace="System.Web"%>
<Script language="C#" runat=server>
void Page_Load(object sender, EventArgs e) {
foreach(string f in Request.Files.AllKeys) {
HttpPostedFile file = Request.Files[f];
file.SaveAs("c:''inetpub''test''UploadedFiles''" + file.FileName);
}
}
</Script>
<html>
<head></head>
<body>
<p> Upload complete. </p>
</body>
</html>
问题有两个方面:webApp在IDE下看起来OK,给出了上面列出的RequestFiles容器中没有文件的症状。一旦我发布到本地IIS,它开始将错误500返回给WinApp测试客户端。我们追溯到目录访问权限(有趣的是)。我们愉快地尝试写到站点之外的位置。
所以添加了一个上传子目录到网站,并设置了完全的权限。然后将文件写入代码更改为:
foreach(string f in Request.Files.AllKeys)
{
//File.Create(@"C:'test1.txt");
HttpPostedFile file = Request.Files[f];
file.SaveAs(Server.MapPath("~/Upload/") + file.FileName);
}
现在一切正常。