HttpWebRequest.GetResponse()在尝试发布文件时总是在计时 [英] HttpWebRequest.GetResponse() Always Timing Out When Trying to Post File
问题描述
嗨!
尝试将文件发布到php脚本时遇到问题。
我知道100%确保URL正确并且可以访问php脚本。我100%知道我要上传的文件存在。
当我尝试上传时,.GetResponse()方法超时。有时它抛出异常:底层连接已关闭:接收时发生意外错误
这是我的文件上传代码:
public static string PostData( string strUrl, string strFileToUpload)
{
< span class =code-keyword> try
{
const string strFileFormName = file;
var oUri = new Uri(strUrl);
var strBoundary = ---- ------ + DateTime.Now.Ticks.ToString( x);
// 尾随边界字符串
var boundaryBytes = Encoding.ASCII.GetBytes( \\\\ n - + strBoundary + \\\\ n);
// 帖子邮件标题
var sb = new StringBuilder();
sb.Append( - );
sb.Append(strBoundary);
sb.Append( \\\\ n);
sb.Append( Content-Disposition:form-data; name = \);
sb.Append(strFileFormName);
sb.Append( \ ; filename = \);
sb.Append(Path.GetFileName(strFileToUpload));
sb.Append( \);
sb.Append( \\\\ n);
sb.Append( Content-Type:);
sb.Append( application / octet-stream);
sb.Append( \\\\ n);
sb.Append( \\\\ n);
var strPostHeader = sb.ToString();
var postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
// WebRequest
var oWebrequest =(HttpWebRequest)WebRequest.Create(oUri);
oWebrequest.ContentType = multipart / form-data; boundary = + strBoundary;
oWebrequest.Method = POST;
oWebrequest.Timeout = Timeout.Infinite;
oWebrequest.KeepAlive = true ;
// 这很重要,否则无论如何整个文件都将被读入内存......
oWebrequest.AllowWriteStreamBuffering = true ;
// 获取FileStream并设置WebRequest的最终属性
var oFileStream = new FileStream(strFileToUpload,FileMode.Open,FileAccess.Read);
var length = postHeaderBytes.Length + oFileStream.Length + boundaryBytes.Length;
oWebrequest.ContentLength = length;
var oRequestStream = oWebrequest.GetRequestStream();
// 写邮件标题
oRequestStream.Write( postHeaderBytes, 0 ,postHeaderBytes.Length);
// 将文件内容分成小块(最多4096字节)。
// byte [] buffer = new Byte [checked((uint)Math.Min(4096) ,(int)oFileStream.Length))];
var buffer = new 字节 [已检查(( uint ) oFileStream.Length)];
var bytesRead = 0 ;
while ((bytesRead = oFileStream.Read(buffer, 0 ,buffer.Length)) != 0 )
oRequestStream.Write(buffer, 0 ,bytesRead);
oFileStream.Close();
// 添加尾随边界
oRequestStream.Write( boundaryBytes, 0 ,boundaryBytes.Length);
var oWResponse = oWebrequest.GetResponse();
var s = oWResponse.GetResponseStream();
if (s!= null )
{
var sr = new StreamReader(s);
var sReturnString = sr.ReadToEnd();
// 清理
oFileStream.Close();
oRequestStream.Close();
s.Close();
sr.Close();
return sReturnString;
}
}
catch { return 字符串跨度> .Empty; }
return String .Empty;
}
Hi ! 这篇关于HttpWebRequest.GetResponse()在尝试发布文件时总是在计时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
这是我在服务器端的PHP代码:
< pre lang =PHP> <?php
require(' vars.php'跨度>);
$ dbHost = DB_HOST; // MySQL主机
$ dbUser = DB_USER; // MySQL用户名
$ dbPass = DB_PASSWORD; // MySQL密码
$ dbDatabase = DB_NAME; // MySQL数据库名称
function connect_database(){
global $ dbHost,$ dbUser,$ dbPass, $ dbDatabase ;
$ mysql = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
if (!$ mysql){
$ html 。= 数据库错误。$ header。 无法连接数据库,请检查配置。。$ footer;
die($ html);
}
if (!mysql_select_db($ dbDatabase,$ mysql)){
mysql_close($ mysql);
$ html 。= 数据库错误 。$ header。 无法选择'。$ dbDatabase。 '数据库,请检查配置。。$ footer;
die($ html);
}
return $ mysql ;
}
connect_database();
$ ID = getRandomString();
$ Location = stats /.$ID. 。html;
if(is_uploaded_file($ _ FILES [' file'] [' tmp_name']))
{
if (move_uploaded_file($ _ FILES [' file'] [' tmp_name'] [0],$ Location)){
mysql_query( INSERT INTO`user_stat_links`(`s_id`)VALUES('。$ ID。 '))
或 die(mysql_error());
echo http:// myurl。 COM /统计/ ID =跨度> $ ID?。
退出;
}
}
echo 错误跨度>;
?>
我非常困惑这个。我之前使用过这个c#代码来上传文件,它已经100%正常工作了。
请帮忙! dbHost
= DB_HOST; // MySQL主机
dbUser
= DB_USER; // MySQL用户名
dbPass
= DB_PASSWORD; // MySQL密码
I'm having an issue when trying to post a file to a php script.
I know 100% sure that the URL is correct and the php script is accessible. I know 100% that the file I'm trying to upload exists.
When I try and upload, the .GetResponse() method times out. Sometimes it throws the exception: "The underlying connection was closed: An unexpected error occurred on a receive"
Here's my file upload code:
public static string PostData(string strUrl, string strFileToUpload)
{
try
{
const string strFileFormName = "file";
var oUri = new Uri(strUrl);
var strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
// The trailing boundary string
var boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n");
// The post message header
var sb = new StringBuilder();
sb.Append("--");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append(strFileFormName);
sb.Append("\"; filename=\"");
sb.Append(Path.GetFileName(strFileToUpload));
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append("application/octet-stream");
sb.Append("\r\n");
sb.Append("\r\n");
var strPostHeader = sb.ToString();
var postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
// The WebRequest
var oWebrequest = (HttpWebRequest)WebRequest.Create(oUri);
oWebrequest.ContentType = "multipart/form-data; boundary=" + strBoundary;
oWebrequest.Method = "POST";
oWebrequest.Timeout = Timeout.Infinite;
oWebrequest.KeepAlive = true;
// This is important, otherwise the whole file will be read to memory anyway...
oWebrequest.AllowWriteStreamBuffering = true;
// Get a FileStream and set the final properties of the WebRequest
var oFileStream = new FileStream(strFileToUpload, FileMode.Open, FileAccess.Read);
var length = postHeaderBytes.Length + oFileStream.Length + boundaryBytes.Length;
oWebrequest.ContentLength = length;
var oRequestStream = oWebrequest.GetRequestStream();
// Write the post header
oRequestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
// Stream the file contents in small pieces (4096 bytes, max).
//byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)oFileStream.Length))];
var buffer = new Byte[checked((uint)oFileStream.Length)];
var bytesRead = 0;
while ((bytesRead = oFileStream.Read(buffer, 0, buffer.Length)) != 0)
oRequestStream.Write(buffer, 0, bytesRead);
oFileStream.Close();
// Add the trailing boundary
oRequestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
var oWResponse = oWebrequest.GetResponse();
var s = oWResponse.GetResponseStream();
if (s != null)
{
var sr = new StreamReader(s);
var sReturnString = sr.ReadToEnd();
// Clean up
oFileStream.Close();
oRequestStream.Close();
s.Close();
sr.Close();
return sReturnString;
}
}
catch { return String.Empty; }
return String.Empty;
}
here's my PHP code on the server end:
<?php
require('vars.php');
$dbHost = DB_HOST; // MySQL host
$dbUser = DB_USER; // MySQL username
$dbPass = DB_PASSWORD; // MySQL password
$dbDatabase = DB_NAME; // MySQL database name
function connect_database() {
global $dbHost, $dbUser, $dbPass, $dbDatabase;
$mysql = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$mysql) {
$html .= "Database Error".$header."Can not connect to database, please check the configuration.".$footer;
die($html);
}
if (!mysql_select_db($dbDatabase, $mysql)) {
mysql_close($mysql);
$html .= "Database Error".$header."Can not select '".$dbDatabase."' database, please check the configuration.".$footer;
die($html);
}
return $mysql;
}
connect_database();
$ID = getRandomString();
$Location = "stats/".$ID.".html";
if(is_uploaded_file($_FILES['file']['tmp_name']))
{
if (move_uploaded_file($_FILES['file']['tmp_name'][0], $Location)) {
mysql_query("INSERT INTO `user_stat_links` (`s_id`)VALUES('".$ID."')")
or die(mysql_error());
echo "http://myurl.com/stats/?id=".$ID;
exit;
}
}
echo "error";
?>
I'm extremely baffled by this. I've used this c# code before to upload files and it has worked 100% fine.
Please help!dbHost
= DB_HOST; // MySQL host
dbUser
= DB_USER; // MySQL username
dbPass
= DB_PASSWORD; // MySQL password