將檔案上傳到伺服器是開發 Web 應用程式時的常見任務。 HTTP POST multipart/form-data 是一種 MIME 類型,用於與其他表單資料一起傳輸檔案。本文將提供在 Windows Phone 8 和 Windows 8 中使用 HTTP POST multipart/form-data 上傳檔案的全面指南,解決程式碼無法上傳檔案或提供錯誤的常見問題。
問題中的第一個程式碼區塊嘗試在 Windows Phone 8 中使用 HTTP POST multipart/form-data 上傳 SQLite 資料庫。但是,提供的程式碼遇到了一個問題,其中fileBytes 陣列為空。這可能是因為未使用從isolatedStorageFile讀取檔案的正確方法。
要解決此問題,請考慮使用以下程式碼來讀取檔案:
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); } }
另一個問題是隨檔案一起傳遞附加數據,例如「userid=SOME_ID」。在提供的程式碼中,沒有傳遞此資料的機制。要包含其他數據,可以如下使用 HttpWebRequest 物件:
NameValueCollection postData = new NameValueCollection(); postData.Add("userid", "SOME_ID"); byte[] postDataBytes = Encoding.UTF8.GetBytes(postData.ToString()); postStream.Write(postDataBytes, 0, postDataBytes.Length);
問題中的第二個程式碼區塊使用較新的 API HttpClient 來上傳檔案。但是,程式碼假定使用 MultipartFormDataContent 物件來封裝檔案和附加資料。這種假設是不正確的,因為 HttpClient 支援直接傳送 multipart/form-data 請求,因此無需中間 MultipartFormDataContent 物件。
以下程式碼示範如何在 Windows 8 中使用 HttpClient 上傳檔案:
HttpClient httpClient = new HttpClient(); ByteArrayContent fileContent = new ByteArrayContent(fileBytes); fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); MultipartFormDataContent multiPartContent = new MultipartFormDataContent(); multiPartContent.Add(fileContent, "file", "file.ext"); HttpResponseMessage response = await httpClient.PostAsync("http://www.myserver.com/upload.php", multiPartContent);
在此範例中,建立了 fileContent 物件並為其指派了檔案位元組。 MediaTypeHeaderValue 用於指定檔案的內容類型。該檔案與檔案名稱和副檔名一起新增到 MultipartFormDataContent 物件中。可以透過檢查 HttpResponseMessage 物件來存取伺服器的回應。
本文探討了在 Windows Phone 中使用 HTTP POST multipart/form-data 將檔案上傳到伺服器的過程8 和 Windows 8。透過解決空 fileBytes 的問題並提供替代實現,本指南使開發人員能夠掌握在其應用程式中有效處理文件上傳的知識。
以上是如何在 Windows Phone 8 和 Windows 8 中使用 HTTP POST Multipart/Form-Data 有效地將檔案上傳到伺服器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!