通过帖子发送流
我正在尝试通过帖子发送照片,并且找到了一个可以执行此操作的类,但是来自 FileInfo 对象。我需要更改此类才能发送流(由 photoChooserTask 返回),但我不知道如何操作。这是类:
public class DataContractMultiPartSerializer
{
private string boundary;
public DataContractMultiPartSerializer(string boundary)
{
this.boundary = boundary;
}
private void WriteEntry(StreamWriter writer, string key, object value)
{
if (value != null)
{
writer.Write("--");
writer.WriteLine(boundary);
if (value is FileInfo)
{
FileInfo f = value as FileInfo;
writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""; ilename=""{1}""", key, f.Name);
writer.WriteLine("Content-Type: application/octet-stream");
writer.WriteLine("Content-Length: " + f.Length);
writer.WriteLine();
writer.Flush();
Stream output = writer.BaseStream;
Stream input = f.OpenRead();
byte[] buffer = new byte[4096];
for (int size = input.Read(buffer, 0, buffer.Length); size > 0; size = nput.Read(buffer, 0, buffer.Length))
{
output.Write(buffer, 0, size);
}
output.Flush();
writer.WriteLine();
}
else
{
writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""", key);
writer.WriteLine();
writer.WriteLine(value.ToString());
}
}
}
我尝试以这种方式更改它:
if (value is Stream)
{
//FileInfo f = value as FileInfo;
FileStream f = value as FileStream;
writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""; filename=""{1}""", key, "sentPhoto.jpg");
writer.WriteLine("Content-Type: application/octet-stream");
writer.WriteLine("Content-Length: " + f.Length);
writer.WriteLine();
writer.Flush();
Stream output = writer.BaseStream;
//Stream input = f.OpenRead();
byte[] buffer = new byte[4096];
for (int size = input.Read(buffer, 0, buffer.Length); size > 0; size = nput.Read(buffer, 0, buffer.Length))
{
output.Write(buffer, 0, buffer.Length);
}
output.Flush();
writer.WriteLine();
}
else
{
writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""", key);
writer.WriteLine();
writer.WriteLine(value.ToString());
}
但它不会进入 for 循环,因为大小为 0。 谁能给我一个线索吗?
非常感谢
I'm trying to send a photo through post and I've found a class that does it, but from a FileInfo object. I need to change this class in order to send a Stream (returned by the photoChooserTask) and I don't know how. Here's the class:
public class DataContractMultiPartSerializer
{
private string boundary;
public DataContractMultiPartSerializer(string boundary)
{
this.boundary = boundary;
}
private void WriteEntry(StreamWriter writer, string key, object value)
{
if (value != null)
{
writer.Write("--");
writer.WriteLine(boundary);
if (value is FileInfo)
{
FileInfo f = value as FileInfo;
writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""; ilename=""{1}""", key, f.Name);
writer.WriteLine("Content-Type: application/octet-stream");
writer.WriteLine("Content-Length: " + f.Length);
writer.WriteLine();
writer.Flush();
Stream output = writer.BaseStream;
Stream input = f.OpenRead();
byte[] buffer = new byte[4096];
for (int size = input.Read(buffer, 0, buffer.Length); size > 0; size = nput.Read(buffer, 0, buffer.Length))
{
output.Write(buffer, 0, size);
}
output.Flush();
writer.WriteLine();
}
else
{
writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""", key);
writer.WriteLine();
writer.WriteLine(value.ToString());
}
}
}
I've tried to change it this way:
if (value is Stream)
{
//FileInfo f = value as FileInfo;
FileStream f = value as FileStream;
writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""; filename=""{1}""", key, "sentPhoto.jpg");
writer.WriteLine("Content-Type: application/octet-stream");
writer.WriteLine("Content-Length: " + f.Length);
writer.WriteLine();
writer.Flush();
Stream output = writer.BaseStream;
//Stream input = f.OpenRead();
byte[] buffer = new byte[4096];
for (int size = input.Read(buffer, 0, buffer.Length); size > 0; size = nput.Read(buffer, 0, buffer.Length))
{
output.Write(buffer, 0, buffer.Length);
}
output.Flush();
writer.WriteLine();
}
else
{
writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""", key);
writer.WriteLine();
writer.WriteLine(value.ToString());
}
but it does not enter to the for loop because size is 0.
Can anyone give me a clue?
Thank you very much
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我已将函数转换为:
现在我已经传递了一个字节数组,并将其写在一块中。做我对流所做的事情时,我只得到损坏的图像。
我希望它能帮助某人
I've converted the function to this:
Now I'm passing already a bytearray and I write it in one piece. Doing what I was doing with the Stream I only got corrupted images.
I hope it helps someone