我正在嘗試開發一個Windows Phone 7應用程序,該應用程序使用PHP將所選圖片(從圖片選擇器任務)上載到服務器。從Windows Phone應用程序到PHP的帖子圖像
我想使用HttpWebRequest爲了做到這一點。數據也成功發佈。 我面臨的問題是在發佈之前需要將圖像編碼爲base64。 而且,我無法正確編碼它。
這是迄今爲止我的C#代碼:
public partial class SamplePage : PhoneApplicationPage
{
public SamplePage()
{
InitializeComponent();
}
PhotoChooserTask selectphoto = null;
private void SampleBtn_Click(object sender, RoutedEventArgs e)
{
selectphoto = new PhotoChooserTask();
selectphoto.Completed += new EventHandler<PhotoResult>(selectphoto_Completed);
selectphoto.Show();
}
void selectphoto_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
BinaryReader reader = new BinaryReader(e.ChosenPhoto);
image1.Source = new BitmapImage(new Uri(e.OriginalFileName));
txtBX.Text = e.OriginalFileName;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://"+QR_Reader.MainPage.txtBlck+"/beamer/saveimage.php");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
string str = BitmapToByte(image1);
MessageBox.Show(str);
string postData = String.Format("image={0}", str);
// Getting the request stream.
request.BeginGetRequestStream
(result =>
{
// Sending the request.
using (var requestStream = request.EndGetRequestStream(result))
{
using (StreamWriter writer = new StreamWriter(requestStream))
{
writer.Write(postData);
writer.Flush();
}
}
// Getting the response.
request.BeginGetResponse(responseResult =>
{
var webResponse = request.EndGetResponse(responseResult);
using (var responseStream = webResponse.GetResponseStream())
{
using (var streamReader = new StreamReader(responseStream))
{
string srresult = streamReader.ReadToEnd();
}
}
}, null);
}, null);
} // end of taskresult == OK
} // end of select photo completed
private Stream ImageToStream(Image image1)
{
WriteableBitmap wb = new WriteableBitmap(400, 400);
wb.Render(image1, new TranslateTransform { X = 400, Y = 400 });
wb.Invalidate();
Stream myStream = new MemoryStream();
wb.SaveJpeg(myStream, 400, 400, 0, 70);
return myStream;
}
private string BitmapToByte(Image image) //I suspect there is something wrong here
{
Stream photoStream = ImageToStream(image);
BitmapImage bimg = new BitmapImage();
bimg.SetSource(photoStream); //photoStream is a stream containing data for a photo
byte[] bytearray = null;
using (MemoryStream ms = new MemoryStream())
{
WriteableBitmap wbitmp = new WriteableBitmap(bimg);
wbitmp.SaveJpeg(ms, wbitmp.PixelWidth, wbitmp.PixelHeight, 0, 100);
bytearray = ms.ToArray();
}
string str = Convert.ToBase64String(bytearray);
return str;
}
}
的BitmapToByte功能用於將圖像轉換爲base64字符串。 而且,ImageToStream函數用於將其轉換爲流。
現在,我嚴重懷疑這兩個函數有什麼問題。
此外,我得到完全相同的base64字符串爲每個圖像。是的,無論我選擇什麼圖像,我都會得到完全相同的base64字符串。這很奇怪。 我不知道這是什麼問題。
我在這裏上傳了一個文本文件:http://textuploader.com/?p=6&id=vWZy 它包含base64字符串。
在服務器端,PHP正在成功接受postdata並且解碼工作也很完美(我手動解碼了一些base64字符串以確保這一點)。 我唯一遇到的問題是base64編碼。
請幫幫我。
編輯 我做的ImageToStream和BitmapToByte功能如下更改:
private MemoryStream ImageToStream(Image image1)
{
WriteableBitmap wb = new WriteableBitmap(400, 400);
wb.Render(image1, new TranslateTransform { X = 400, Y = 400 });
wb.Invalidate();
MemoryStream myStream = new MemoryStream();
wb.SaveJpeg(myStream, 400, 400, 0, 70);
return myStream;
}
private string BitmapToByte(Image image)
{
MemoryStream photoStream = ImageToStream(image);
byte[] bytearray = photoStream.ToArray();
string str = Convert.ToBase64String(bytearray);
return str;
}
如果有一個圖像上傳到PHP任何其他方法,那麼他們也沒關係。 所有,我想要做的是** **上傳**我的形象,就是這樣。 – 2013-03-22 02:03:16
請修改您的代碼以僅包含與問題相關的部分。 – 2013-03-22 02:08:55
使用WebClient.UploadFile也許它比httpwebrequest更簡單,因爲webclient它是httpwebrequest的包裝http://msdn.microsoft.com/en-us/library/ms144229.aspx – jjchiw 2013-03-22 02:12:55