私のプログラムは Telerik ASyncUpload コントロールを使用して、ユーザーが画像をアップロードできるようにします。コントロールは画像のみを受け入れるように構成されており、その FileUploaded イベントには、いくつかの追加作業 (サイズ変更 (2 回) と JPEG への変換) を行う余分なコードがあります。
ただし、以下のコード ブロックが終了し、イメージが保存された後、プログラムは System.IO 例外をスローします。「別のプロセスで使用されているため、プロセスはファイルにアクセスできません。」
protected void RadAsyncUpload1_FileUploaded(object sender, FileUploadedEventArgs e) {
ListViewItem lvwItem = lvwItems.EditItem;
RadAsyncUpload upl = (RadAsyncUpload)lvwItem.FindControl("RadAsyncUpload1");
string target = MapPath(upl.TargetFolder);
try
{
foreach (UploadedFile file in upl.UploadedFiles) {
using (Bitmap originalImage = new Bitmap(file.InputStream)) {
System.Drawing.Image cloneImage = (Bitmap)originalImage.Clone();
// Resize the picture to max 200 * 200
Size mySize = new Size(200, 200);
cloneImage = Imaging.resizeImage(originalImage, mySize);
// Create a bitmap from the cloned image. Bitmap is needed for saveJpeg routine
Bitmap newImage = new Bitmap(cloneImage);
// Convert to jpg if necessary
if (file.GetExtension() != ".jpeg" || file.GetExtension() != ".jpg") {
Imaging.saveJpeg(Path.Combine(target, file.GetNameWithoutExtension() + ".jpg"), newImage, 100);
}
else {
}
// Now create a thumbnail
Size thumbSize = new Size(50, 50);
cloneImage = Imaging.resizeImage(originalImage, thumbSize);
Bitmap thumbImage = new Bitmap(cloneImage);
Imaging.saveJpeg(Path.Combine(target, file.GetNameWithoutExtension() + "_lille.jpg"), thumbImage, 100);
uploadedFileName = file.GetNameWithoutExtension() + ".jpg";
}
}
}
catch (IOException ex)
{
}
}
この時点で、2 つのファイル (200*200 と 50*50) が存在しますが、ルーチンを終了するとエラーが発生します。
すべての画像と file.InputStream を閉じて破棄しようとしましたが、それでもエラーが表示されます。また、 UploadedFile を破棄できるかどうかも調べてみましたが、そのメソッドが存在することがわかりませんでした。
簡単な解決策があることは確かですが、私はこれを何時間も見つめていましたが、単にそれが見えません。
ありがとう。