7×24小时服务热线:4006-371-371
当前位置:371数据中心 - 媒体报道 -正文

IIS添加 配置HTTPHandler.ashx文件

更新时间:18/1/8

我有一个Web应用程序项目,支持文件传输操作,以供应商产品的后端。它的组成与IIS 6.0编译成一个网站Win2003的服务器上2 HttpHandler的文件:

UploadHandler.ashx

DownloadHandler.ashx

这些文件被“贴”从一个ColdFusion网站公开用户界面。在某种程度上,因为这些处理器工作,必须从ColdFusion的叫我的任务完成了。

< ASP:按钮的ID =“DownloadButton”一项PostBackUrl =“/ DownloadHandler.ashx”=“服务器”文本=“下载”/>

使用用于下载的一项PostBackUrl很好地工作 - 在进入DownloadHandler.ashx时,它的 context.Request.Form [“txtRecordNumber”]认定其键输入值;

但我不能使用这种技术用于上传,因为我必须做一些处理的的的

使用的HttpWebRequest 这似乎过于复杂,我的第一个方法试过,我永远无法得到工作。症状开始与一个HTTP 401状态code,然后演变成一个302状态code所以我研究了其他的想法。

保护无效UploadHandlerButton_Click(对象发件人,EventArgs的发送)
{
如果(FileUpload1.HasFile)
{
尝试
{
BuildFormData();
//Server.Transfer(\"UploadHandler.ashx“,真正的);
的Response.Redirect(“/ UploadHandler.ashx”);
}
赶上(例外someError)
{
LogText(“失败:”+ someError.Message);
}
}
}
保护无效BuildFormData()
{
BinaryReader B =新BinaryReader(FileUpload1.PostedFile.InputStream);
INT的numBytes = FileUpload1.PostedFile.ContentLength;
字节[] = fileContent b.ReadBytes(的numBytes);
objBinaryData.Text = System.Text.Encoding.UTF8.GetString(fileContent);
b64fileName.Text = FileUpload1.PostedFile.FileName;
//在字符串创建任意元数据
strMetaData.Text =“recAuthorLoc = anyname1UDF:OPEAnalyst = anyname2UDF:授权号= 0102030405”;
}

尝试中的错误使用Server.Transfer的(上面)到我.ashx的文件的结果:
对于UploadHandler.ashx 错误执行子请求

在尝试当然GET(而不是POST)和的trace.axd使用的Response.Redirect(以上)到我的ashx的文件,结果显示什么表单集合中,这样似乎是错误的了。

无论是那些让我看到我需要的Request.Form看到我的code处理该上传请求中的表单数据。我清楚地失去了一些东西在这里...感谢您帮助。

修改-UPDATE:
我想我可以澄清我的问题。当UploadHandler.ashx从ColdFusion的发布,它需要的所有输入的可在FORM集合中(例如的Request.Form [“FILEDATA”]等)

保护无效BuildFormData()
{
BinaryReader B =新BinaryReader(FileUpload1.PostedFile.InputStream);
INT的numBytes = FileUpload1.PostedFile.ContentLength;
字节[] = fileContent b.ReadBytes(的numBytes);
objBinaryData.Text = System.Text.Encoding.UTF8.GetString(fileContent);
b64fileName.Text = FileUpload1.PostedFile.FileName;
}

但我的不使用的FileUpload1.PostedFile.SaveAs方法来保存文件的地方我的Web服务器上。我需要以某种方式 - 在这里原谅的语言 - “重职”的这个数据到一个完全不同的文件 - 即,我UploadHandler.ashx处理程序。所有我上面尝试了愚蠢的技术不能完成我需要什么。

修改-UPDATE(20 2009年8月) - 我使用Javascript最终的解决方案:

保护无效UploadHandlerButton_Click(对象发件人,EventArgs的发送)
{
如果(FileUpload1.HasFile)
{
尝试
{
ctlForm.Text = BuildFormData();
串strJS = InjectJS(“_ xclick”);
ctlPostScript.Text = strJS;
}
赶上(例外someError)
{
LogText(“失败:”+ someError.Message);
}
}
}
私人字符串InjectJS(字符串strFormId)
{
StringBuilder的strScript =新的StringBuilder();
strScript.Append(“< SCRIPT LANGUAGE =”JavaScript的'>“中);
strScript.Append(“VAR ctlForm1 = document.forms.namedItem('{0}');”);
strScript.Append(“ctlForm1.submit();”);
strScript.Append(“&下; /脚本>”中);
返回的String.Format(strScript.ToString(),strFormId);
}
保护字符串BuildFormData()
{
BinaryReader B =新BinaryReader(FileUpload1.PostedFile.InputStream);
INT的numBytes = FileUpload1.PostedFile.ContentLength;
字节[] = fileContent b.ReadBytes(的numBytes);
//将二进制输入的Base64 UUEn codeD输出。
串base64String;
base64String =
System.Convert.ToBase64String(fileContent,
0,
fileContent.Length);
objBinaryData.Text = base64String;
b64fileName.Text = FileUpload1.PostedFile.FileName;
//在字符串创建任意元数据
strMetaData.Text =“recAuthorLoc =帕特森,弗雷德UDF:OPEAnalyst =老虎伍兹UDF:授权号= 0102030405”;StringBuilder的strForm =新的StringBuilder();
strForm.Append(“<输入类型= \\”隐藏\\“NAME = \\”strTrimURL \\“价值= \\”{0} \\“/>”中);
strForm.Append(“<输入类型= \\”隐藏\\“NAME = \\”objBinaryData \\“价值= \\”{1} \\“/>”中);
strForm.Append(“<输入类型= \\”隐藏\\“NAME = \\”b64fileName \\“价值= \\”{2} \\“/>”中);
strForm.Append(“<输入类型= \\”隐藏\\“NAME = \\”strDocument \\“价值= \\”{3} \\“/>”中);
strForm.Append(“<输入类型= \\”隐藏\\“NAME = \\”strMetaData \\“价值= \\”{4} \\“/>”中);
strForm.Append(“< /形式为GT;”);
返回的String.Format(strForm.ToString()
,txtTrimURL.Text
,objBinaryData.Text
,b64fileName.Text
,txtTrimRecordType.Text
,strMetaData.Text);
}

解决方案

什么工作对我来说是注入了新的形式和一些JavaScript到表单提交UploadHandler.ashx。这(对我来说)是更容易把握比HttpWebRequest的技术。