मैं विंडोज फोन 8 ऐप विकसित कर रहा हूं। मैं MIME प्रकार मल्टीपार्ट / फॉर्म-डेटा और "उपयोगकर्ता आईडी = SOME_ID" नामक एक स्ट्रिंग डेटा के साथ HTTP POST अनुरोध का उपयोग करके PHP वेब सेवा के माध्यम से SQLite डेटाबेस अपलोड करना चाहता हूं।
मैं HttpClient, RestSharp या MyToolkit जैसी 3 पार्टी के कामों का उपयोग नहीं करना चाहता। मैंने नीचे दिए गए कोड की कोशिश की, लेकिन यह फ़ाइल अपलोड नहीं करता है और मुझे कोई त्रुटि नहीं देता है। यह Android, PHP आदि में ठीक काम कर रहा है, इसलिए वेब सेवा में कोई समस्या नहीं है। नीचे मेरा दिया गया कोड (WP8 के लिए) है। इसके साथ गलत क्या है?
मैंने गुगली की है और मैं WP8 के लिए विशिष्ट नहीं हो रहा हूं
async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(DBNAME);
//Below line gives me file with 0 bytes, why? Should I use
//IsolatedStorageFile instead of StorageFile
//var file = await ApplicationData.Current.LocalFolder.GetFileAsync(DBNAME);
byte[] fileBytes = null;
using (var stream = await file.OpenReadAsync())
{
fileBytes = new byte[stream.Size];
using (var reader = new DataReader(stream))
{
await reader.LoadAsync((uint)stream.Size);
reader.ReadBytes(fileBytes);
}
}
//var res = await HttpPost(Util.UPLOAD_BACKUP, fileBytes);
HttpPost(fileBytes);
}
private void HttpPost(byte[] file_bytes)
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.myserver.com/upload.php");
httpWebRequest.ContentType = "multipart/form-data";
httpWebRequest.Method = "POST";
var asyncResult = httpWebRequest.BeginGetRequestStream((ar) => { GetRequestStreamCallback(ar, file_bytes); }, httpWebRequest);
}
private void GetRequestStreamCallback(IAsyncResult asynchronousResult, byte[] postData)
{
//DON'T KNOW HOW TO PASS "userid=some_user_id"
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
Stream postStream = request.EndGetRequestStream(asynchronousResult);
postStream.Write(postData, 0, postData.Length);
postStream.Close();
var asyncResult = 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();
streamResponse.Close();
streamRead.Close();
response.Close();
}
मैंने विंडोज 8 में भी अपनी समस्या को हल करने की कोशिश की लेकिन यह भी काम नहीं कर रहा है।
public async Task Upload(byte[] fileBytes)
{
using (var client = new HttpClient())
{
using (var content = new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture)))
{
content.Add(new StreamContent(new MemoryStream(fileBytes)));
//Not sure below line is true or not
content.Add(new StringContent("userid=farhanW8"));
using (var message = await client.PostAsync("http://www.myserver.com/upload.php", content))
{
var input = await message.Content.ReadAsStringAsync();
}
}
}
}