4

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>
4

1 に答える 1

4

コードは正しいようです。しかし、私はあなたが受け取っているストリームについて疑問を持っています。データが含まれていますか?次のコードを試していただけますか?BLOBのアップロード後に受信した合計バイト数を返します。

using (var ms = new MemoryStream())
{
    byte[] buffer = new byte[32768]; 
    int bytesRead, totalBytesRead = 0; 

    do 
    { 
        bytesRead = stream.Read(buffer, 0, buffer.Length); 
        totalBytesRead += bytesRead; 

        ms.Write(buffer, 0, bytesRead); 
    } while (bytesRead > 0); 

    blob.UploadFromStream(ms);

    return String.Format("Uploaded {0}KB", totalBytesRead/1024);
}
于 2012-10-10T15:24:51.783 に答える