我尝试使用HTTPWebrequest(多部分/表单数据)上传文件。
所以我看了几页,写了以下代码:
var boundary = "----------" + DateTime.Now.Ticks.ToString("x");
byte[] boundaryBytes = Encoding.ASCII.GetBytes(boundary);
var template = boundary + "\r\n" +
"Content-Disposition: form-data; name=\"{0}\"" + "\r\n\r\n" +
"{1}\r\n";
// Request Header
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://domain.com/test.php");
req.Method = "POST";
req.KeepAlive = true;
req.ContentType = "multipart/form-data; boundary=" + boundary;
req.CookieContainer = COOKIE;
Stream ms = new MemoryStream();
string formItem;
byte[] formItemBytes;
string fileName = Path.GetFileName(@"C:\Users\Username\Image.jpg");
// POST Data
formItem = string.Format(template, "Filename", fileName);
formItemBytes = Encoding.UTF8.GetBytes(formItem);
ms.Write(formItemBytes, 0, formItemBytes.Length);
formItem = string.Format(template, "Username", "RedPetals");
formItemBytes = Encoding.UTF8.GetBytes(formItem);
ms.Write(formItemBytes, 0, formItemBytes.Length);
var headerTemplate = "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-html" target="_blank">stream\r\n\r\n";
string header = string.Format(headerTemplate, "Image", fileName);
byte[] headerBytes = Encoding.UTF8.GetBytes(header);
ms.Write(boundaryBytes, 0, boundaryBytes.Length);
ms.Write(headerBytes, 0, headerBytes.Length);
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) != 0)
{
ms.Write(buffer, 0, bytesRead);
}
}
byte[] boundaryEndBytes = Encoding.ASCII.GetBytes(boundary + "--");
ms.Write(boundaryEndBytes, 0, boundaryEndBytes.Length);
req.ContentLength = ms.Length;
ms.Position = 0;
byte[] tempBuffer = new byte[ms.Length];
ms.Read(tempBuffer, 0, tempBuffer.Length);
ms.Close();
using(Stream rs = req.GetRequestStream())
{
rs.Write(tempBuffer, 0, tempBuffer.Length);
}
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
string result = "";
if (response.StatusCode == HttpStatusCode.OK)
{
Stream resStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(resStream, Encoding.UTF8);
result = readStream.ReadToEnd();
Console.Write(result);
resStream.Close();
readStream.Close();
}
但不传递POST数据。。有我错过的部分吗?
HttpAnalyzer发布“数据”(Formdata选项卡为“无数据显示”):
----------8d1984e7dd49750
内容-处置:表单-数据;name="Filename"
我mage.jpg
----------8d1984e7dd49750
内容-处置:表单-数据;name="Username"
红花瓣
----------8d1984e7dd49750
内容配置:表单数据;name=“img”;filename=“Image.jpg”
内容类型:应用程序/八位字节流
???
----------8d1984e7dd49750--
响应结果:
//回显变量转储($\u POST);echo var_dump($_文件);
数组(0){}数组(0){}
//var boundary = "----------" + DateTime.Now.Ticks.ToString("x");
var boundary = "--------" + DateTime.Now.Ticks.ToString("x");
// var template = boundary + "\r\n" +
// "Content-Disposition: form-data; name=\"{0}\"" + "\r\n\r\n" +
// "{1}\r\n";
var template = "--" + boundary + "\r\n" +
"Content-Disposition: form-data; name=\"{0}\"" + "\r\n\r\n" +
"{1}\r\n";
以下是我遇到此问题时的解决方案:
客户:
public async Task UploadImage(byte[] image, string url)
{
Stream stream = new System.IO.MemoryStream(image);
HttpStreamContent streamContent = new HttpStreamContent(stream.AsInputStream());
Uri resourceAddress = null;
Uri.TryCreate(url.Trim(), UriKind.Absolute, out resourceAddress);
Windows.Web.Http.HttpRequestMessage request = new Windows.Web.Http.HttpRequestMessage(Windows.Web.Http.HttpMethod.Post, resourceAddress);
request.Content = streamContent;
var httpClient = new Windows.Web.Http.HttpClient();
var cts = new CancellationTokenSource();
Windows.Web.Http.HttpResponseMessage response = await httpClient.SendRequestAsync(request).AsTask(cts.Token);
}
控制器:
public async Task<HttpResponseMessage> Post()
{
Stream requestStream = await this.Request.Content.ReadAsStreamAsync();
byte[] byteArray = null;
using (MemoryStream ms = new MemoryStream())
{
await requestStream.CopyToAsync(ms);
byteArray = ms.ToArray();
}
.
.
.
return Request.CreateResponse(HttpStatusCode.OK);
}
我的本地计算机上有一个文件。我有一个Perl脚本可以通过SFTP连接将此文件复制到远程位置()。
我有一组参数和一组图像,每组参数都包含一个且仅包含一个图像。我的代码 有了这个代码,我可以上传一个图像随着一个parameter.but我想发送数组中的参数和数组中的图像too.is上传数组参数与数组图像的方式?如果是如何跟踪图像和参数?
我想通过Shrine上载器gem上载一个xls文件(Libreoffice),但是我得到了一个回滚错误,比如文件类型必须是一个..(在我的initializers/Shrine.rb中有mime类型)。这是我的神殿 这是我的shrine_uploader.rb 我可以上传xlsx文件,但是我不明白为什么我不能上传xls文件,即使mime类型是application/vnd.ms-excel。 谢谢
我想运行一个Java应用程序。我使用JBoss服务器。我使用Maven。我使用Eclipse。我使用Eclipse将企业存档中的网络存档部署到服务器上。 对于小程序,我需要小程序的。applet.html的可访问文件夹中的类文件。我的想法是复制。class-从我的Web存档的目标文件夹到资源文件夹。所以我在Web-Maven-Project的pom.xml中添加了以下插件: 我想我把阶段和目标搞砸
问题内容: 所以我知道有很多类似的帖子,但是我认为这足以满足自己的疑问: 我正在用PHP和jQuery构建XLS导出器。我正在尝试使用jQuery发布一个数组(我相信它与GET查询字符串一样长),并用它在我的服务器上生成XLS文件,然后用户可以下载该文件。 过去,我使用隐藏的iframe来完成此操作,但是由于它们只是重定向到url,因此这要求我使用GET,这使我感到紧张。 我的问题是:如果这些文件
问题内容: 我正在开发一个远程备份应用程序,有时我需要上传大文件,例如15 MB,我已经在某些手机上进行了测试,但遇到内存不足错误 使用此功能是否可以使用更少的内存? 这里的错误日志 修改并添加固定无缓冲区后,出现此错误 我猜这差个字节是标题数据吗?如何获取标头的length()? 问题答案: 您应该使用HttpURLConnection 的or 方法。这将防止您的数据在内存中缓冲并耗尽。 文档中