wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了windows-phone-7 – WP7 – 带图像的POST表单大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我需要将 Windows Phone 7中的图像发送到某些电子邮件地址. 我使用这个类将文本值提交给 php脚本,解析数据并将格式化的电子邮件发送到地址. 问题是我无法弄清楚如何将图像发送到该脚本,将图像附加到电子邮件.可以以任何方式更改php脚本.如果我有一个Image对象,如何更改此类以允许发送图像? public class PostSubmitter { public String
我需要将 Windows Phone 7中的图像发送到某些电子邮件地址.
我使用这个类将文本值提交给 PHP脚本,解析数据并将格式化的电子邮件发送到地址.
问题是我无法弄清楚如何将图像发送到该脚本,将图像附加到电子邮件.可以以任何方式更改PHP脚本.如果我有一个Image对象,如何更改此类以允许发送图像?
public class PostSubmitter
{
    public String url { get; set; }
    public Dictionary<String,String> parameters { get; set; }

    public PostSubmitter() { }

    public void Submit()
    {
        // Prepare web request...
        httpWebrequest myrequest = (httpWebrequest)Webrequest.Create(url);
        myrequest.Method = "POST";
        myrequest.ContentType = "application/x-www-form-urlencoded";

        myrequest.beginGetrequestStream(new AsyncCallBACk(GetrequestStreamCallBACk),myrequest);
    }

    private void GetrequestStreamCallBACk(IAsyncResult asynchronousResult)
    {
        httpWebrequest request = (httpWebrequest)asynchronousResult.AsyncState;
        System.IO.Stream postStream = request.EndGetrequestStream(asynchronousResult);

        // Prepare Parameters String
        String paramete@L_673_9@tring = "";
        foreach (KeyValuePair<String,String> parameter in parameters)
        {
            paramete@L_673_9@tring = paramete@L_673_9@tring + (paramete@L_673_9@tring != "" ? "&" : "") + String.Format("{0}={1}",parameter.Key,parameter.value);
        }

        byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(paramete@L_673_9@tring);
        // Write to the request stream.
        postStream.Write(byteArray,paramete@L_673_9@tring.Length);
        postStream.Close();
        // Start the asynchronous operation to get the response
        request.beginGetResponse(new AsyncCallBACk(GetResponseCallBACk),request);
    }

    private void GetResponseCallBACk(IAsyncResult asynchronousResult)
    {
        httpWebrequest request = (httpWebrequest)asynchronousResult.AsyncState;
        httpWebResponse response = (httpWebResponsE)request.EndGetResponse(asynchronousResult);
        Stream streamResponse = response.GetResponseStream();
        StreamReader streamRead = new StreamReader(streamResponsE);
        String responseString = streamRead.ReadToEnd();
        // Close the stream object
        streamResponse.Close();
        streamRead.Close();
        // Release the httpWebResponse
        response.Close();
        //Action<String> act = new Action<String>(DisplayResponsE);
        //this.Dispatcher.beginInvoke(act,responseString);
    }

我用这种方式使用这个类:

Dictionary<String,String> data = new Dictionary<String,String>()
{
        {"nom",nom.Text},{"cognoms",cognoms.Text},{"email",email.Text},{"telefon",telefon.Text}
};

PostSubmitter post = new PostSubmitter() { url = "http://example.com/parserscript.PHP",parameters = data };
post.Submit();

非常感谢你!

我已将上面的代码转换为以下代码,我相信它会有所帮助:
public class PostSubmitter
{
    public String url { get; set; }
    public Dictionary<String,object> parameters { get; set; }
    String boundary = "----------" + datetiR_776_11845@e.Now.Ticks.ToString();

    public PostSubmitter() { }

    public void Submit()
    {
        // Prepare web request...
        httpWebrequest myrequest = (httpWebrequest)Webrequest.Create(new Uri(url));
        myrequest.Method = "POST";
        myrequest.ContentType = String.Format("multipart/form-data; boundary={0}",boundary);

        myrequest.beginGetrequestStream(new AsyncCallBACk(GetrequestStreamCallBACk),myrequest);
    }

    private void GetrequestStreamCallBACk(IAsyncResult asynchronousResult)
    {
        httpWebrequest request = (httpWebrequest)asynchronousResult.AsyncState;
        Stream postStream = request.EndGetrequestStream(asynchronousResult);

        writeMultipartObject(postStream,parameters);
        postStream.Close();

        request.beginGetResponse(new AsyncCallBACk(GetResponseCallBACk),request);
    }

    private void GetResponseCallBACk(IAsyncResult asynchronousResult)
    {
        httpWebrequest request = (httpWebrequest)asynchronousResult.AsyncState;
        httpWebResponse response = (httpWebResponsE)request.EndGetResponse(asynchronousResult);
        Stream streamResponse = response.GetResponseStream();
        StreamReader streamRead = new StreamReader(streamResponsE);
        streamResponse.Close();
        streamRead.Close();
        // Release the httpWebResponse
        response.Close();
    }


    public void writeMultipartObject(Stream stream,object data)
    {
        StreamWriter writer = new StreamWriter(stream);
        if (data != null)
        {
            foreach (var entry in data as Dictionary<String,object>)
            {
                WriteEntry(writer,entry.Key,entry.value);
            }
        }
        writer.Write("--");
        writer.Write(boundary);
        writer.WriteLine("--");
        writer.Flush();
    }

    private void WriteEntry(StreamWriter writer,String key,object value)
    {
        if (value != null)
        {
            writer.Write("--");
            writer.WriteLine(boundary);
            if (value is byte[])
            {
                byte[] ba = value as byte[];

                writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""; filename=""{1}""",key,"sentPhoto.jpg");
                writer.WriteLine(@"Content-Type: application/octet-stream");
                //writer.WriteLine(@"Content-Type: image / jpeg");
                writer.WriteLine(@"Content-Length: " + ba.Length);
                writer.WriteLine();
                writer.Flush();
                Stream output = writer.baseStream;

                output.Write(ba,ba.Length);
                output.Flush();
                writer.WriteLine();
            }
            else
            {
                writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""",key);
                writer.WriteLine();
                writer.WriteLine(value.ToString());
            }
        }
    }
}

要将图像从相机转换为字节数组,我已经使用了以下内容

private void photochooserTask_Completed(object sender,PhotoResult E)
        {
            try
            {
                BitmapImage image = new BitmapImage();
                image.Set@R_489_9016@e(e.ChosenPhoto);
                foto.source = image;

                using (MemoryStream ms = new MemoryStream())
                {
                    WriteableBitmap btmMap = new WriteableBitmap(imagE);

                    // write an imagE into the stream
                    Extensions.SaveJpeg(btmMap,ms,image.PixelWidth,image.PixelHeight,100);

                    byteArray = ms.ToArray();
                }
            }
            catch (ArgumentNullException) { /* Nothing */ }
        }

我这样使用这个类:

Dictionary<String,object> data = new Dictionary<String,object>()
        {
            {"nom",telefon.Text},{"comentari",comentari.Text},{"foto",byteArray},};
        PostSubmitter post = new PostSubmitter() { url = "http://example.com/parserscript.PHP",parameters = data};
        post.Submit();

我不知道这是将图像从手机发送到服务器的最佳方式,但是我找不到任何东西,所以我自己上课只是读这个,而且这花了我好几天.如果有人想改进代码或写任何评论将受到欢迎.

大佬总结

以上是大佬教程为你收集整理的windows-phone-7 – WP7 – 带图像的POST表单全部内容,希望文章能够帮你解决windows-phone-7 – WP7 – 带图像的POST表单所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。