gpt4 book ai didi

c# - Silverlight Http Post上传图片

转载 作者:太空宇宙 更新时间:2023-11-03 19:33:04 25 4
gpt4 key购买 nike

我一直在尝试执行 HTTP Post 请求以在 silverlight 应用程序中为 Windows Phone 7 应用程序上传图像。在线示例代码无法让我从 API 获得所需的响应。任何人都可以提供执行此操作的工作代码吗?

我所说的期望响应是指 API 响应说上传文件的格式无法读取。

提前致谢!

这是我的代码:

 private void post_image(version, username,password,job-id, serviceUri)
{
if (session_free.bLoggedIn)
{
bool submit_success = false;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(serviceUri));

IsolatedStorageFileStream stream = IsolatedStorageFile.GetUserStoreForApplication().OpenFile("file.jpg", FileMode.Open);

request.PostMultiPartAsync(new Dictionary<string, object> { { "version", version }, { "username", user }, { "password", pass }, { filename, stream } }, new AsyncCallback(asyncResult =>
{

Thread.Sleep(1000);

HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);

Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
Post_Result = reader.ReadToEnd();

this.Dispatcher.BeginInvoke(delegate
{
MessageBox.Show(Post_Result);
response.Close();
});
}), filename);

Thread.Sleep(1000);
}

else
{
MessageBox.Show("User not signed in! Please login to continue...", "Invalid Authentication", MessageBoxButton.OK);
}
}

public class DataContractMultiPartSerializer
{
private string boundary;

public DataContractMultiPartSerializer(string boundary)
{
this.boundary = boundary;
}

private void WriteEntry(StreamWriter writer, string key, object value, string filename)
{

if (value != null)
{
writer.Write("--");
writer.WriteLine(boundary);
if (value is IsolatedStorageFileStream)
{
IsolatedStorageFileStream f = value as IsolatedStorageFileStream;
writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""; filename=""{1}""", key, filename);
writer.WriteLine("Content-Type: image/jpeg");
writer.WriteLine("Content-Length: " + f.Length);
writer.WriteLine();
writer.Flush();
Stream output = writer.BaseStream;
Stream input = f;
byte[] buffer = new byte[4096];
for (int size = input.Read(buffer, 0, buffer.Length); size > 0; size = input.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());
}
}
}

public void WriteObject(Stream stream, object data, string filename)
{
StreamWriter writer = new StreamWriter(stream);
if (data != null)
{


if (data is Dictionary<string, object>)
{
foreach (var entry in data as Dictionary<string, object>)
{
WriteEntry(writer, entry.Key, entry.Value, filename);
}
}

else
{
foreach (var prop in data.GetType().GetFields())
{
foreach (var attribute in prop.GetCustomAttributes(true))
{
if (attribute is System.Runtime.Serialization.DataMemberAttribute)
{
DataMemberAttribute member = attribute as DataMemberAttribute;
writer.Write("{0}={1}&", member.Name ?? prop.Name, prop.GetValue(data));
}
}
}
}
writer.Flush();
}
}
}

最佳答案

您使用多部分消息是否有原因?
您使用的 PostMultiPartAsync 方法是什么?大概是某个地方的扩展方法吧?
将来,尝试提供最小的、完整的代码片段来演示该问题。

无论如何,抱歉,这不是一个完整的工作示例,但这里是执行此操作的一种方法的步骤。

创建请求并为 BeginGetRequestStream 设置回调

var request = (HttpWebRequest)WebRequest.Create(App.Config.ServerUris.Login);

request.Method = "POST";
request.BeginGetRequestStream(ReadCallback, request);

在该回调中,获取请求流并将您的数据写入其中。

using (var postStream = request.EndGetRequestStream(asynchronousResult))
{
// Serialize image to byte array, or similar (that's what imageBuffer is)
postStream.Write(imageBuffer, 0, imageBuffer.Length);
}

为服务器的响应设置一个回调。

request.BeginGetResponse(ResponseCallback, request);

检查服务器上的一切是否正常

private void ResponseCallback(IAsyncResult asynchronousResult)
{
var request = (HttpWebRequest)asynchronousResult.AsyncState;

using (var resp = (HttpWebResponse)request.EndGetResponse(asynchronousResult))
{
using (var streamResponse = resp.GetResponseStream())
{
using (var streamRead = new StreamReader(streamResponse))
{
string responseString = streamRead.ReadToEnd(); // Assuming that the server will send a text based indication of upload success

// act on the response as appropriate
}
}
}
}

在服务器上,您将需要反序列化数据并将其转换回适当的图像。

HTH.

关于c# - Silverlight Http Post上传图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3837399/

25 4 0
文章推荐: css - 分词:分词在