/// <summary> /// 请求上传图片API接口 /// </summary> /// <param name="requestUri">API请求的uri</param> /// <param name="httpMethod">API的请求方式</param> /// <param name="requestParams">API的请求参数</param> /// <param name="imageParam">图片参数</param> private void AsyncRequestAPIWithFile(string requestUri, string httpMethod, Dictionary<string, object> requestParams, FileSyncAPIRequestFileParam fileParam) { HttpWebRequest request = null; FileSyncAPIRequestState state = new FileSyncAPIRequestState(); try { requestUri = FileSyncUtility.AddParametersToURL(requestUri, requestParams); request = (HttpWebRequest)WebRequest.Create(new Uri(requestUri)); boundary = "----------" + DateTime.Now.Ticks.ToString("x"); byte[] beginBoundary = Encoding.UTF8.GetBytes(string.Format("--{0}\r\n", boundary)); string fileTemplate = "Content-Disposition: form-data; name=\"file\"; filename=\"{0}\"\r\nContent-Type: application/octet-stream\r\n\r\n"; byte[] bfile = Encoding.UTF8.GetBytes(String.Format(fileTemplate, fileParam.FileKey)); byte[] endBoundary = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); request.Method = httpMethod; request.ContentType = "multipart/form-data; boundary=" + boundary; request.ContentLength = beginBoundary.Length + bfile.Length + fileParam.FileData.Length + endBoundary.Length; request.AllowWriteStreamBuffering = false; request.Timeout = 300000; state.request = request; state.requestParams = requestParams; state.fileParam = fileParam; state.beginBoundary = beginBoundary; state.bfile = bfile; state.endBoundary = endBoundary; request.BeginGetRequestStream(new AsyncCallback(RequestReadyWithFile), state); } catch (Exception ex) { if (DownloadStringCompleted != null) { FileSyncError error = new FileSyncError(); error.error_code = requestErrorDomain; error.error_msg = "A Error Occurred While Creating HTTP Web Request. " + ex.Message; //System.Windows.Deployment.Current.Dispatcher.BeginInvoke(delegate() // { if (DownloadStringCompleted != null) { DownloadStringCompleted(this, new FileSyncRequestResultEventArgs(request == null ? null : request.Address, FileSyncAPIRequestResult.Fail, error) { RequestParams = requestParams }); } // }); } } }
/// <summary> /// 判断是否是上传文件 /// </summary> private FileSyncAPIRequestFileParam IsUploadFile(Dictionary<string, object> requestParams) { FileSyncAPIRequestFileParam fileParam = null; foreach (KeyValuePair<string, object> param in requestParams) { FileInfo fileTemp = param.Value as FileInfo; if (fileTemp != null) { fileParam = new FileSyncAPIRequestFileParam(); fileParam.FileKey = param.Key; using (FileStream stream = new FileStream(fileTemp.FullName, FileMode.Open)) { byte[] bytes = new byte[stream.Length]; stream.Seek(0, SeekOrigin.Begin); stream.Read(bytes, 0, bytes.Length); fileParam.FileData = bytes; } } } return fileParam; }