private void btnBrowse_Click(object sender, RoutedEventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); var res = openFileDialog.ShowDialog(); if ((bool)res) { textBox.Text = openFileDialog.FileName; SocketFileInfo socketFileInfo = new SocketFileInfo() { TaskSts = TaskStatus.NONE, FilePath = openFileDialog.FileName, TimeStamp = DateTime.Now.ToString(), FileSize = (int)new FileInfo(openFileDialog.FileName).Length }; sendFiles.Add(socketFileInfo); } }
private void SendFileToDevice1(SocketFileInfo item) { try { WebClient webclient = new WebClient(); webclient.Encoding = Encoding.UTF8; var url = httpUrl + "upload"; var memStream = new MemoryStream(); var fileStream = new FileStream(item.FilePath, FileMode.Open, FileAccess.Read); var boundary = "---------------" + DateTime.Now.Ticks.ToString("x"); var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n"); webclient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary); //webclient.UploadFile(url, item.FilePath); string filename = item.FilePath.Substring(item.FilePath.LastIndexOf("/") + 1); string filePartHeader = "Content-Disposition:form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type:application/octet-stream\r\n\r\n"; var header = string.Format(filePartHeader, "file", filename); var headerbytes = Encoding.ASCII.GetBytes(header); memStream.Write(beginBoundary, 0, beginBoundary.Length); memStream.Write(headerbytes, 0, headerbytes.Length); var base64string = System.Convert.ToBase64String(System.IO.File.ReadAllBytes(item.FilePath)); var readText = Encoding.ASCII.GetBytes(base64string); memStream.Write(readText, 0, readText.Length); // 写入最后的结束边界符------------ 3.------------------------- memStream.Write(endBoundary, 0, endBoundary.Length); var tempBuffer = new byte[memStream.Length]; memStream.Read(tempBuffer, 0, tempBuffer.Length); var bytess = webclient.UploadData(url, tempBuffer); //var bytess = webclient.UploadFile(url, item.FilePath); string res = Encoding.UTF8.GetString(bytess); Console.WriteLine(res); item.TaskSts = TaskStatus.SUCCESS; } catch (Exception ex) { Console.WriteLine(ex.Message); } }
private void SendFileToDevice(SocketFileInfo item) { try { int BufferSize = 1024; byte[] buffer = new byte[256]; byte[] fileBuffer = new byte[BufferSize]; using (FileStream reader = new FileStream(item.FilePath, FileMode.Open, FileAccess.Read, FileShare.None)) { long send = 0L; long length = reader.Length; string fileName = Path.GetFileName(item.FilePath); string sendStr = "Req=1001|" + "FileName=" + fileName + "|" + "FileSize=" + length.ToString(); clientSock.Send(Encoding.Default.GetBytes(sendStr)); clientSock.Receive(buffer); string mes = Encoding.Default.GetString(buffer); if (mes.Contains("OK")) { Console.WriteLine("Sending file:" + fileName + ".Plz wait..."); int read, sent; while ((read = reader.Read(fileBuffer, 0, BufferSize)) != 0) { sent = 0; while ((sent += clientSock.Send(fileBuffer, sent, read, SocketFlags.None)) < read) { send += (long)sent; } } Console.WriteLine("Send finish.\n"); } item.TaskSts = TaskStatus.SUCCESS; } int count = clientSock.Receive(buffer); string[] command = Encoding.UTF8.GetString(buffer, 0, count).Split('|'); Console.WriteLine("收到" + Encoding.UTF8.GetString(buffer, 0, count)); if (command[0] == "ACK=1001") { string fileName = command[1].Replace("FileName=", ""); var fileSize = Convert.ToInt64(command[2].Replace("FileSize=", "")); clientSock.Send(Encoding.UTF8.GetBytes("ACK=OK")); SocketFileInfo socketFileInfo = new SocketFileInfo() { FilePath = path + fileName, TimeStamp = DateTime.Now.ToString(), FileSize = fileSize, TaskSts = TaskStatus.NONE }; long receive = 0L; using (FileStream writer = new FileStream(Path.Combine(path, socketFileInfo.FilePath), FileMode.Create, FileAccess.Write, FileShare.None)) { int received; while (receive < socketFileInfo.FileSize) { received = clientSock.Receive(buffer); writer.Write(buffer, 0, received); writer.Flush(); receive += (long)received; } } socketFileInfo.FilePath = Path.Combine(path, socketFileInfo.FilePath); Console.WriteLine("Receive finish.\n"); this.Dispatcher.Invoke(new Action(() => { recvFiles.Add(socketFileInfo); })); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
private void SendFileToDevice(SocketFileInfo item) { try { var url = httpUrl + "upload"; var memStream = new MemoryStream(); var webRequest = (HttpWebRequest)WebRequest.Create(url); var boundary = "---------------" + DateTime.Now.Ticks.ToString("x"); var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n"); // 设置属性 webRequest.Method = "POST"; webRequest.Timeout = 5000; webRequest.ContentType = "multipart/form-data; boundary=" + boundary; webRequest.Accept = @"*/*"; webRequest.Headers.Add("Accept-Encoding", "gzip,deflate,br,sdch"); var fileInfo = new FileInfo(item.FilePath); var size = fileInfo.Length; var envpath = fileInfo.DirectoryName; string newfilename = "new" + fileInfo.Name; string newpath = envpath + @"\" + newfilename; string filePartHeader = "Content-Disposition:form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type:application/t\r\n\r\n"; var header = string.Format(filePartHeader, "file", newpath); var headerbytes = Encoding.ASCII.GetBytes(header); memStream.Write(beginBoundary, 0, beginBoundary.Length); memStream.Write(headerbytes, 0, headerbytes.Length); var base64string = File.ReadAllText(item.FilePath) + "\r\n"; var readText = Encoding.UTF8.GetBytes(base64string); memStream.Write(readText, 0, readText.Length); // 写入最后的结束边界符------------ 3.------------------------- memStream.Write(endBoundary, 0, endBoundary.Length); webRequest.ContentLength = memStream.Length; var requestStream = webRequest.GetRequestStream(); memStream.Position = 0; var tempBuffer = new byte[memStream.Length]; memStream.Read(tempBuffer, 0, tempBuffer.Length); requestStream.Write(tempBuffer, 0, tempBuffer.Length); //响应 ------------------- 4.----------------------------------- var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); string responseContent; using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"))) { responseContent = httpStreamReader.ReadToEnd(); } Console.WriteLine(responseContent); httpWebResponse.Close(); webRequest.Abort(); //fileStream.Close(); memStream.Close(); item.TaskSts = TaskStatus.SUCCESS; } catch (Exception ex) { Console.WriteLine(ex.Message); } }
private bool DownloadFile(string fileName) { try { var memStream = new MemoryStream(); var boundary = "---------------" + DateTime.Now.Ticks.ToString("x"); // 边界符 var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); // 最后的结束符 var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n"); var url = httpUrl + "download"; HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = "POST"; request.ContentType = "multipart/form-data; boundary=" + boundary; request.Accept = "*/*"; request.Headers.Add("Accept-Encoding", "gzip, deflate, br"); string stringKeyHeader = "--" + boundary + "\r\nContent-Disposition:form-data; name=\"{0}\"\r\n\r\n{1}\r\n"; var dataByte = Encoding.ASCII.GetBytes(string.Format(stringKeyHeader, "filename", fileName)); memStream.Write(dataByte, 0, dataByte.Length);//循环写入 参数 stringKeyHeader = "--" + boundary + "\r\nContent-Disposition:form-data; name=\"{0}\"\r\n\r\n{1}\r\n"; var dataByte1 = Encoding.ASCII.GetBytes(string.Format(stringKeyHeader, "path", "upload/")); memStream.Write(dataByte1, 0, dataByte1.Length);//循环写入 参数 memStream.Write(endBoundary, 0, endBoundary.Length); var requestStream = request.GetRequestStream(); memStream.Position = 0; var tempBuffer = new byte[memStream.Length]; memStream.Read(tempBuffer, 0, tempBuffer.Length); requestStream.Write(tempBuffer, 0, tempBuffer.Length); //发送请求并获取相应回应数据 HttpWebResponse response = request.GetResponse() as HttpWebResponse; //直到request.GetResponse()程序才开始向目标网页发送Post请求 Stream responseStream = response.GetResponseStream(); //创建本地文件写入流 Stream stream = new FileStream(path + fileName, FileMode.Create); byte[] bArr = new byte[1024]; int size = responseStream.Read(bArr, 0, (int)bArr.Length); while (size > 0) { stream.Write(bArr, 0, size); size = responseStream.Read(bArr, 0, (int)bArr.Length); } stream.Flush(); stream.Close(); responseStream.Close(); SocketFileInfo socketFile = new SocketFileInfo() { FilePath = path + fileName, TimeStamp = DateTime.Now.ToString(), FileSize = new FileInfo(path + fileName).Length, TaskSts = TaskStatus.NONE }; this.Dispatcher.Invoke(new Action(() => { recvFiles.Add(socketFile); })); return(true); } catch (Exception exp) { Console.WriteLine(exp.ToString()); return(false); } }