2012-10-10 85 views
4

我有一个简单的应用程序,我正在做一个文件类型输入到WCF服务的表单发布。我试图将表单文件上传到Azure blob,然后通过点击相应的blob url进行下载。上传和下载流到Azure Blob

现在发生了什么是我正在上传文件到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"; 
} 

而且我知道该文件越来越通过小提琴手/休息的服务,我已经成功地上传和下载通过硬编码的文件在文件中是这样的:

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> 
+0

”流的位置未设置为0“。那解决了我的问题,谢谢+1 –

回答

3

您的代码看起来正确。但我对你收到的信息流有怀疑。你确定它包含数据吗?你可以尝试下面的代码吗?它返回上传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); 
} 
+0

你是对的“Uploaded 0KB”。我想我会添加我的客户端代码。 – user1134179

+0

所以真正的问题是为什么我的表单不能发送文件输入中指定的文件? – user1134179