इस कोड को बहुत कम है और समझने के लिए (उम्मीद) आसान:
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
}
}
}
एक पूरा डाउनलोड करने योग्य समाधान के लिए इस पर मेरे ब्लॉग पोस्ट देखें: इस परियोजना http://simpleuploader.codeplex.com/ बाहर File Upload in Silverlight - a Simple Solution
स्रोत
2009-10-26 00:00:25
लिंक के लिए धन्यवाद! – JohnC
भविष्य में इस उत्तर को देखने वाले किसी के भी लाभ के लिए, अपलोडफाइलएसिंक या अपलोडडाटाएसिंक शायद यहां अधिक उपयुक्त होगा। OpenWriteAsync एक स्ट्रीम लिखने के लिए बहुत अच्छा है, लेकिन यह एक बाइट सरणी नहीं लेता है जैसे फ़ाइल सामग्री एक तर्क के रूप में और इसे अपलोड करें। OpenWriteCompletedEventHandler का अर्थ है "अपलोड पूर्ण हो गया है" के बजाय "भाप अब लिखने के लिए तैयार है"। –
नोटिंग के लिए धन्यवाद, मुझे UploadFileAsync से अवगत नहीं था। मैंने थोड़ी सी खोज की है और यह आया है कि यह SL2 में समर्थित नहीं था ... मैं देखता हूं कि यह संस्करण 3 में समर्थित है और उसके अनुसार कोड अपडेट करें। –