C# 无法获取使用c创建大文件HTTP put文件的响应#
无法获取使用c创建大文件HTTP put文件的响应# 当用户创建的文件或文件夹上传到云端时,我正在使用文件观察服务监视器 如果文件大小超过512 MB,则获取响应的时间太长 在这里,我混淆了我的代码或服务器的问题 这一错误的原因是什么 如果我的代码有任何变化,建议我C# 无法获取使用c创建大文件HTTP put文件的响应#,c#,webrequest,C#,Webrequest,无法获取使用c创建大文件HTTP put文件的响应# 当用户创建的文件或文件夹上传到云端时,我正在使用文件观察服务监视器 如果文件大小超过512 MB,则获取响应的时间太长 在这里,我混淆了我的代码或服务器的问题 这一错误的原因是什么 如果我的代码有任何变化,建议我 { var fileFolderObj1 = new FileFolder(); var postURL = apiBaseUri + "/filefolder/create/file/user/" + userId
{
var fileFolderObj1 = new FileFolder();
var postURL = apiBaseUri + "/filefolder/create/file/user/" + userId; // +"?type=file";
code = HttpStatusCode.OK;
HttpWebResponse response = null;
FileInfo f = new FileInfo(filePath);
long filesizeF = f.Length;
try
{
string selectedFile = null;
selectedFile = filePath;
var fi = System.IO.Path.GetFileName(filePath);
////commented for some reason
var postParameters = new Dictionary<string, object>();
postParameters.Add("file", new FileParameter(filePath, ""));
postParameters.Add("parentId", parentId);
postParameters.Add("newName", fi);
postParameters.Add("cloudId", cloudId);
postParameters.Add("isSecure", isSecure);
//postParameters.Add("fileSize", fi.Length);
postParameters.Add("fileSize", filesizeF);
var userAgent = "Desktop";
var formDataBoundary = "----WebKitFormBoundary" + DateTime.Now.Ticks.ToString("x");
var uri = new Uri(postURL);
var createFileRequest = WebRequest.Create(uri) as HttpWebRequest;
this.SetBasicAuthHeader(createFileRequest, userId, password);
createFileRequest.ContentType = "multipart/form-data";
createFileRequest.Method = "PUT";
createFileRequest.Timeout = System.Threading.Timeout.Infinite;
createFileRequest.KeepAlive = false;/*true;*/
createFileRequest.UserAgent = userAgent;
createFileRequest.CookieContainer = new CookieContainer();
try
{
using (var requestStream = createFileRequest.GetRequestStream())
{
}
using (response = (HttpWebResponse)createFileRequest.GetResponse())
{
StreamReader(response.GetResponseStream()).ReadToEnd();
fileFolderObj1 = JsonConvert.DeserializeObject<FileFolder>(reslut);
}
}
catch (Exception exc)
{
if (response != null)
{
code = response.StatusCode;
}
}
}
catch (Exception exc)
{
}
}
}
private static readonly Encoding encoding = Encoding.UTF8;
private void WriteMultipartFormData(Dictionary<string, object> postParameters, string boundary, Stream requestStream, ILogService logService = null)
{
var needsCLRF = false;
foreach (var param in postParameters)
{
// Skip it on the first parameter, add it to subsequent parameters.
if (needsCLRF)
{
requestStream.Write(encoding.GetBytes("\r\n"), 0, encoding.GetByteCount("\r\n"));
}
needsCLRF = true;
if (param.Value is FileParameter)
{
var fileToUpload = (FileParameter)param.Value;
// Add just the first part of this param, since we will write the file data directly to the Stream
var header = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{2}\"\r\nContent-Type: {3}\r\n\r\n",
boundary,
param.Key,
fileToUpload.FileName ?? param.Key,
fileToUpload.ContentType ?? "application/octet-stream");
requestStream.Write(encoding.GetBytes(header), 0, encoding.GetByteCount(header));
// Write the file data directly to the Stream, rather than serializing it to a string.
FileStream fileStream = new FileStream(fileToUpload.FileName, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0,buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
logService.Debug("WRITEMULTIPART FORM DATA Bufferlent Running :{0}", bytesRead);
}
fileStream.Close();
}
else
{
var postData = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}",
boundary,
param.Key,
param.Value);
requestStream.Write(encoding.GetBytes(postData), 0, encoding.GetByteCount(postData));
}
}
// Add the end of the request. Start with a newline
var footer = "\r\n--" + boundary + "--\r\n";
requestStream.Write(encoding.GetBytes(footer), 0, encoding.GetByteCount(footer));
}
}
{
var fileFolderObj1=新的FileFolder();
var postrl=apiBaseUri+“/filefolder/create/file/user/”+userId;//+“?type=file”;
代码=HttpStatusCode.OK;
HttpWebResponse响应=null;
FileInfo f=新的FileInfo(filePath);
long filesizeF=f.长度;
尝试
{
字符串selectedFile=null;
selectedFile=filePath;
var fi=System.IO.Path.GetFileName(文件路径);
////出于某种原因评论
var postParameters=新字典();
添加(“文件”,新文件参数(文件路径“”);
后参数。添加(“parentId”,parentId);
后参数。添加(“新名称”,fi);
后参数。添加(“cloudId”,cloudId);
后参数。添加(“isSecure”,isSecure);
//添加(“文件大小”,fi.Length);
添加(“文件大小”,filesizeF);
var userAgent=“桌面”;
var formDataBoundary=“----WebKitFormBoundary”+DateTime.Now.Ticks.ToString(“x”);
var uri=新uri(postrl);
var createFileRequest=WebRequest.Create(uri)为HttpWebRequest;
此.SetBasicAuthHeader(createFileRequest、用户ID、密码);
createFileRequest.ContentType=“多部分/表单数据”;
createFileRequest.Method=“PUT”;
createFileRequest.Timeout=System.Threading.Timeout.Infinite;
createFileRequest.KeepAlive=false;/*true*/
createFileRequest.UserAgent=UserAgent;
createFileRequest.CookieContainer=新的CookieContainer();
尝试
{
使用(var requestStream=createFileRequest.GetRequestStream())
{
}
使用(response=(HttpWebResponse)createFileRequest.GetResponse()
{
StreamReader(response.GetResponseStream()).ReadToEnd();
fileFolderObj1=JsonConvert.DeserializeObject(reslut);
}
}
捕获(异常exc)
{
if(响应!=null)
{
代码=response.StatusCode;
}
}
}
捕获(异常exc)
{
}
}
}
私有静态只读编码编码=Encoding.UTF8;
私有void WriteMultipartFormData(字典后参数、字符串边界、流请求流、ILogService logService=null)
{
var needsCLRF=假;
foreach(后参数中的var参数)
{
//跳过第一个参数,将其添加到后续参数。
如果(需要SCLRF)
{
Write(encoding.GetBytes(“\r\n”)、0、encoding.GetByteCount(“\r\n”);
}
needsCLRF=true;
if(param.Value为FileParameter)
{
var fileToUpload=(FileParameter)param.Value;
//只添加此参数的第一部分,因为我们将直接将文件数据写入流
var header=string.Format(“--{0}\r\n内容配置:表单数据;名称=\“{1}\”;文件名=\“{2}\”\r\n内容类型:{3}\r\n\r\n”,
边界,
参数键,
fileToUpload.FileName??参数键,
fileToUpload.ContentType??“应用程序/八位字节流”);
Write(encoding.GetBytes(header),0,encoding.GetByteCount(header));
//将文件数据直接写入流,而不是将其序列化为字符串。
FileStream FileStream=新FileStream(fileToUpload.FileName,FileMode.Open,FileAccess.Read);
字节[]缓冲区=新字节[4096];
int字节读取=0;
而((bytesRead=fileStream.Read(buffer,0,buffer.Length))!=0)
{
写入(缓冲区,0,字节读取);
调试(“WRITEMULTIPART FORM DATA Bufferlent正在运行:{0}”,字节读取);
}
fileStream.Close();
}
其他的
{
var postData=string.Format(“--{0}\r\n内容配置:表单数据;名称=\“{1}\”\r\n\r\n{2}”,
边界,
参数键,
参数值);
Write(encoding.GetBytes(postData),0,encoding.GetByteCount(postData));
}
}
//添加请求的结尾。以换行符开头
var footer=“\r\n--”+boundary+“--\r\n”;
Write(encoding.GetBytes(footer),0,encoding.GetByteCount(footer));
}
}
你的超时设置为什么?你能解释更多关于你的问题@bugfinder你对或file is di是什么意思吗?对不起,这是json对象你的超时设置为什么?你能解释更多关于你的问题@bugfinder你对或file is di是什么意思吗?对不起,这是json对象