UploadFile
セキュリティを確保したい場合は、https 経由で WebClientを使用してみませんか? これにより、追加が自動的に処理されますmultipart/form-data
。
使用例UploadFile
http://msdn.microsoft.com/en-us/library/36s52zhs.aspx
もう1つ、エンコードと暗号化は2つの異なるものです。
編集:
WebClient プロジェクトで WebClient を使用している場合は、質問に Silverlight のタグを付ける必要があります。とにかく、SL の WebClient クラスには UploadData メソッドがありません。詳細については、これを参照してください。
http://msdn.microsoft.com/en-us/library/system.net.webclient%28v=vs.95%29.aspx
とにかく、これがあなたの問題に対する実用的な解決策です:
ボタンのクリックで、次のコードを使用します。
OpenFileDialog dialog = new OpenFileDialog();
bool? retVal = dialog.ShowDialog();
if (retVal.HasValue && retVal == true)
{
using (Stream stream = dialog.File.OpenRead())
{
MemoryStream memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
WebClient webClient = new WebClient();
webClient.Headers["Content-type"] = "multipart/form-data; boundary=---------------------------" + _boundaryNo;
webClient.OpenWriteAsync(new Uri("http://localhost:1463/Home/File", UriKind.Absolute), "POST", new { Stream = memoryStream, FileName = dialog.File.Name });
webClient.OpenWriteCompleted += new OpenWriteCompletedEventHandler(webClient_OpenWriteCompleted);
}
}
そしてイベント自体:
void webClient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
{
if (e.Error == null)
{
Stream responseStream = e.Result as Stream;
dynamic obj = e.UserState;
MemoryStream memoryStream = obj.Stream as MemoryStream;
string fileName = obj.FileName;
if (responseStream != null && memoryStream != null)
{
string headerTemplate = string.Format("-----------------------------{0}\r\n", _boundaryNo);
memoryStream.Position = 0;
byte[] byteArr = memoryStream.ToArray();
string data = headerTemplate + string.Format("Content-Disposition: form-data; name=\"pic\"; filename=\"{0}\"\r\nContent-Type: application/octet-stream\r\n\r\n", fileName);
byte[] header = Encoding.UTF8.GetBytes(data);
responseStream.Write(header, 0, header.Length);
responseStream.Write(byteArr, 0, byteArr.Length);
header = Encoding.UTF8.GetBytes("\r\n");
responseStream.Write(byteArr, 0, byteArr.Length);
byte[] trailer = System.Text.Encoding.UTF8.GetBytes(string.Format("-----------------------------{0}--\r\n", _boundaryNo));
responseStream.Write(trailer, 0, trailer.Length);
}
memoryStream.Close();
responseStream.Close();
}
}
ここで、_boundaryNo はprivate string _boundaryNo = DateTime.Now.Ticks.ToString("x");
Asp.Net MVC 4 および Silverlight 5 で動作させました。
幸運を :)