WCFサービスへのファイルタイプ入力を使用してフォーム投稿を行う単純なアプリがあります。そのファイルをフォームの投稿からAzureBLOBにアップロードし、適切なBLOBURLを押してダウンロードしようとしています。
現在、Azureにファイルをアップロードしていますが、ダウンロードすると、ファイルにコンテンツが含まれていません。たとえば、something.zipまたはsomething.gifをアップロードすると、URLからダウンロードできますが、どちらにも何も含まれません。
これは、ストリームの位置が0に設定されていないことが原因である可能性があることを読みました。以下のストリーム「ストリーム」の位置を設定できないため、memoryStreamにコピーしました。残念ながら、それでも問題は解決しませんでした。
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "Upload")]
public string upload(Stream stream)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(exerciseContainer);
CloudBlob blob = container.GetBlobReference("myblob");
Stream s = new MemoryStream();
stream.CopyTo(s);
s.Seek(0, SeekOrigin.Begin);
blob.UploadFromStream(s);
return "uploaded";
}
また、ファイルがfiddler / breaksを介してサービスに到達していることを知っており、次のようなファイルにハードコーディングすることでファイルを正常にアップロードおよびダウンロードしました。
using (var fileStream = System.IO.File.OpenRead(@"C:\file.zip"))
{
blob.UploadFromStream(fileStream);
}
編集:HTML
<form action='http://127.0.0.1:81/service.svc/Upload' method="post">
<input type="file" name="file" id="btnUpload" value="Upload" />
<input type="submit" value="Submit" class="btnExercise" id="btnSubmitExercise"/>
</form>