Wenn ich eine Image-Datei in einen Blob hochlade, wird das Image scheinbar erfolgreich hochgeladen (keine Fehler). Wenn ich in Cloud Storage Studio gehe, ist die Datei dort, aber mit einer Größe von 0 (null) Bytes.Azure-Speicher: Hochgeladene Dateien mit der Größe Null Bytes
Im Folgenden ist der Code, den ich verwende:
// 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));
Bevor die Image-Datei auf den Speicher hochgeladen wird, wird die Input vom HttpPostedFileBase erscheinen in Ordnung zu sein (die Größe des Bildes entspricht was erwartet wird und keine Ausnahmen werden geworfen).
Und das wirklich seltsame ist, dass dies in anderen Fällen perfekt funktioniert (Hochladen von Power Points oder anderen Bildern aus der Worker-Rolle). Der Code, der die SetContent-Methode aufruft, scheint genau gleich zu sein, und die Datei scheint korrekt zu sein, da eine neue Datei mit null Byte an der richtigen Stelle erstellt wird.
Hat jemand bitte einen Vorschlag? Ich debuggte diesen Code Dutzende Male und ich kann das Problem nicht sehen. Irgendwelche Vorschläge sind willkommen!
Dank
leicht Um zu klären, wenn Sie mit einem Strom arbeiten, überprüfen Sie, ob Sie den Stream der Eigenschaft Position auf 0 gesetzt, nachdem Sie laden was auch immer für Bytes. Standardmäßig wird die Position eines Streams aus irgendeinem Grund an das Ende seines Inhalts gesetzt. – Dusda
Ja, das ist mir immer bewusst, und ich verliere nie mehr als eine Sekunde, um mich daran zu erinnern. Vielen Dank! –
Es tat, danke :) –