【发布时间】:2016-04-26 21:54:52
【问题描述】:
我正在尝试使用 WebClient 将文件上传到服务器。我发布文件的代码如下:
public void UploadMultipart(byte[] file, string filename, string contentType, string url)
{
var webClient = new WebClient();
string boundary = "------------------------" + DateTime.Now.Ticks.ToString("x");
webClient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary);
var fileData = Encoding.UTF8.GetString(file);
var package = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"file\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n{3}\r\n--{0}--\r\n", boundary, filename, contentType, fileData);
var nfile = webClient.Encoding.GetBytes(package);
byte[] resp = webClient.UploadData(url, "POST", nfile);
}
Encoding.UTF8.GetString(file) 行总是返回一个空字符串。我检查了字节数组,它不是空的。我也试过Encoding.UTF8.GetString(file, 0, file.Length),但结果相同。我在某处读到这可能是因为编码不当。如果这是原因,那我该如何解决?我要发送的文件是从相机拍摄的视频。
感谢任何帮助。
【问题讨论】:
-
你能发布一些文件[]数组的内容(十六进制或整数)吗?顺便说一句,GetString 中似乎有一些长度限制 - msdn.microsoft.com/en-us/library/744y86tc(v=vs.110).aspx。不知道如果 file[] > 2048 的行为 - 也可以返回空字符串 :) 检查文档中提供的示例
-
调试器花费了非常长的时间。不知道为什么:(
-
@Kamen 好的,这就是数组的第一个字节的样子postimg.org/image/jeowmhhoh
-
Ahmed,
0字节表示它是一个NUL。字符串以\0结尾,这也是相同的,以及为什么根据您的屏幕截图得到一个空字符串。您应该验证数据实际上是如何写入该数组的。一旦找到NUL(特定于编码),它将停止构建字符串,因为它认为它已经完成并防止溢出。 -
TyCobb 中间的那些值是什么?
标签: c# file-upload character-encoding