public const int CHUNK_SIZE = 4096; public const string UPLOAD_URI = "http://localhost:55087/FileUpload.ashx?filename={0}&append={1}"; private Stream _data; private string _fileName; private long _bytesTotal; private long _bytesUploaded; private void UploadFileChunk() { string uploadUri = ""; // Format the upload URI according to wether the it's the first chunk of the file if (_bytesUploaded == 0) { uploadUri = String.Format(UPLOAD_URI,_fileName,0); // Dont't append } else if (_bytesUploaded < _bytesTotal) { uploadUri = String.Format(UPLOAD_URI, _fileName, 1); // append } else { return; // Upload finished } byte[] fileContent = new byte[CHUNK_SIZE]; _data.Read(fileContent, 0, CHUNK_SIZE); WebClient wc = new WebClient(); wc.OpenWriteCompleted += new OpenWriteCompletedEventHandler(wc_OpenWriteCompleted); Uri u = new Uri(uploadUri); wc.OpenWriteAsync(u, null, fileContent); _bytesUploaded += fileContent.Length; } void wc_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e) { if (e.Error == null) { object[] objArr = e.UserState as object[]; byte[] fileContent = objArr[0] as byte[]; int bytesRead = Convert.ToInt32(objArr[1]); Stream outputStream = e.Result; outputStream.Write(fileContent, 0, bytesRead); outputStream.Close(); if (_bytesUploaded < _bytesTotal) { UploadFileChunk(); } else { // Upload complete } } }
编辑器加载中...