microsoft descargar file-upload azure azure-storage-blobs

file-upload - descargar - portal azure



Almacenamiento de Azure: archivos cargados con tamaƱo cero bytes (2)

Gracias Fabio por hablar de esto y resolver tu propia pregunta. Solo quiero añadir código a lo que has dicho. Tu sugerencia funcionó perfectamente para mí.

var memoryStream = new MemoryStream(); // "upload" is the object returned by fine uploader upload.InputStream.CopyTo(memoryStream); memoryStream.ToArray(); // After copying the contents to stream, initialize it''s position // back to zeroth location memoryStream.Seek(0, SeekOrigin.Begin);

Y ahora estás listo para cargar memoryStream usando:

blockBlob.UploadFromStream(memoryStream);

Cuando subo un archivo de imagen a un blob, la imagen se carga aparentemente con éxito (sin errores). Cuando voy al estudio de almacenamiento en la nube, el archivo está allí, pero con un tamaño de 0 (cero) bytes.

El siguiente es el código que estoy usando:

// These two methods belong to the ContentService class used to upload // files in the storage. public void SetContent(HttpPostedFileBase file, string filename, bool overwrite) { CloudBlobContainer blobContainer = GetContainer(); var blob = blobContainer.GetBlobReference(filename); if (file != null) { blob.Properties.ContentType = file.ContentType; blob.UploadFromStream(file.InputStream); } else { blob.Properties.ContentType = "application/octet-stream"; blob.UploadByteArray(new byte[1]); } } public string UploadFile(HttpPostedFileBase file, string uploadPath) { if (file.ContentLength == 0) { return null; } string filename; int indexBar = file.FileName.LastIndexOf(''//'); if (indexBar > -1) { filename = DateTime.UtcNow.Ticks + file.FileName.Substring(indexBar + 1); } else { filename = DateTime.UtcNow.Ticks + file.FileName; } ContentService.Instance.SetContent(file, Helper.CombinePath(uploadPath, filename), true); return filename; } // The above code is called by this code. HttpPostedFileBase newFile = Request.Files["newFile"] as HttpPostedFileBase; ContentService service = new ContentService(); blog.Image = service.UploadFile(newFile, string.Format("{0}{1}", Constants.Paths.BlogImages, blog.RowKey));

Antes de que el archivo de imagen se cargue en el almacenamiento, la propiedad InputStream de HttpPostedFileBase parece estar bien (el tamaño de la imagen corresponde a lo que se espera. No se producen excepciones).

Y lo realmente extraño es que esto funciona perfectamente en otros casos (cargar Power Points o incluso otras imágenes del rol de Trabajador). El código que llama al método SetContent parece ser exactamente el mismo y el archivo parece correcto ya que se crea un nuevo archivo con cero bytes en la ubicación correcta.

¿Alguien tiene alguna sugerencia por favor? Depuré este código docenas de veces y no puedo ver el problema. Cualquier sugerencia es bienvenida!

Gracias


La propiedad Position del InputStream de HttpPostedFileBase tenía el mismo valor que la propiedad Length (probablemente porque tenía otro archivo anterior a este, ¡creo que estúpido!).

Todo lo que tenía que hacer era restablecer la propiedad Position a 0 (cero).

Espero que esto ayude a alguien en el futuro.