My Asp.net MVC 앱에 파일 업로드가 필요합니다. 업로드 과정에서 새로 업로드 된 파일을 조작하고 싶습니다.새로 업로드 된 파일을 조작하면 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();
이 코드의 문제는 처음에 업로드 된 파일을 조작하는 시도는 IOException이 발생한다는 것입니다 ("다른 프로세스에서 사용 중이기 때문에 프로세스가 파일에 액세스 할 수 있습니다.") 물론 난을 무시할 수 문제는 업로드 된 파일을 이동하는 것보다는 복사하는 것이지만 더 나은 대안을 찾으면 삭제할 수는 없습니다.
어떤 조언이 필요합니까? Duffy
어쩌면 스트림을 먼저 flush()해야합니까? – Jocke
몇 가지 질문 : HttpPostedFileBase가 자체 구현입니까? (나는 문서에서 추상적 인 것으로 나타났습니다). FileIsSmallEnough의 코드는 무엇입니까? 일반적으로, 문제 지점 위에있는 자신의 코드 중 일부가 닫히거나/처리되지 않고 파일 핸들을 고정하도록 설계되었을 때이 프로세스 오류가 발생합니다. File 정적 도우미 클래스에는 파일을 보관하는 객체를 반환하는 몇 가지 메소드가 포함되어 있습니다. 예를 들어, GC를 사용하기 전에 GC를 지우면 냄비를 처분하지 않아도됩니다. –
@Jocke : 나는 플러시()도 시도했다. 차이 없음. – duffy