Neden Asp.net MVC uygulamasında bir dosya yükleme işlemi gerekiyor. Yükleme sırasında yeni yüklenen dosyayı değiştirmek istiyorum.Yeni yüklenen dosyayı işlemek IOException
public ActionResult Edit(int id, FormCollection collection) {
Block block = userrep.GetBlock(id);
foreach (string tag in Request.Files) {
var file = Request.Files[tag] as HttpPostedFileBase;
if (file.ContentLength == 0)
continue;
string tempfile = Path.GetTempFileName()
file.SaveAs(tempfile);
// This doesn't seem to make any difference!!
// file.InputStream.Close();
if (FileIsSmallEnough(file)) {
// Will throw an exception!!
File.Move(tempfile, permanentfile);
} else {
GenerateResizedFile(tempfile, permanentfile);
// Will throw an exception!!
File.Delete(tempfile);
}
block.Image = permanentfile;
}
userrep.Save();
bu snippet'iyle sorun başlangıçta yüklenen dosyayı işlemek için herhangi bir girişim bir IOException oluşturmasıdır ("başka bir işlem tarafından kullanıldığı için işlem dosyaya erişemiyor.") Tabii ki atlayabilir yüklenen dosyayı taşımak yerine kopyalayarak sorun ama daha iyi bir alternatife sahip olduğumda yine de silemiyorum.
Herhangi bir öneri? Duffy
Belki de önce akışı akıtmak zorunda mısın? – Jocke
Soruların birkaçı: HttpPostedFileBase uygulaması kendi başlığın altında mı? (Dokümanlarda soyut olduğunu fark ettim). FileIsSmallEnough için kod nedir? Genellikle, kendi kodunuzun bir kısmı problem noktasının üstünde kapanmadığında/imha edilmediğinde ve işlem tutamaçlarını tutmak için tasarlandığında bu işlem hatasını alırsınız. Dosya statik yardımcı sınıfı, dosyaları saklayan nesneleri döndüren birkaç yöntem içerir; örneğin, bunları kullanmadan önce GC temizlenirse, pot şansınızı yok ederseniz. –
@Jocke: Ben de flush() denedim. Fark yok. – duffy