如何在ASP.NET MVC网站中处理多个图像上传?

时间:2017-08-21 14:51:34

标签: c# asp.net-mvc image-uploading dropzone.js

我使用dropzone.js将多个图像上传到.NET MVC网站。当图像进入服务器时,我调整它们的大小,将信息保存到数据库,然后将实际图像保存在服务器上的文件夹中。当我一次上传一个时,这是有效的,但如果我一次上传多个,每隔几次上传我就会收到此错误:

A generic error occurred in GDI+

Google搜索这似乎是当您无法保存文件时这是一般错误,因为其他进程正在使用该位置。我假设多个上传试图同时保存在同一个文件夹中,一个死掉。它们的文件名不同。

我该如何避免这种情况?有没有办法让线程在尝试保存在同一个文件夹之前等待一个完成?我想知道是否有一个类似于等待调用的方法,它等待它可以保存。

修改更多代码

我不能复制我的整个功能,因为它很长,但保存的部分如下:

//Now we will try saving the actual file. Generate the file name.
String savedFileName = PhotoTools.GenerateImageFileName(photo.image_base_file_name);
String thumbnailSavedFileName = PhotoTools.GenerateImageFileName(photo.image_base_file_name, true);

//Store the file path (directory) that we are going to save the image to.
String directoryToSave = Server.MapPath(Constants.ImageDirectory + $"/{house_id}");

//Create the directory. This function will not do anything if it already exists.
Directory.CreateDirectory(directoryToSave);

//Save the images to the filesystem.
mainImage.Save(Path.Combine(directoryToSave, savedFileName), ImageFormat.Jpeg);
thumbnailImage.Save(Path.Combine(directoryToSave, thumbnailSavedFileName), ImageFormat.Jpeg);

它们不应该与文件名创建的文件名相同:

/// <summary>
/// Generates the base property image filename based on the passed in information.
/// </summary>
/// <param name="propName">The house name that we will use for the file name.</param>        
/// <returns>The generated file name.</returns>
public static String GenerateBaseImageFileName(String propName)
{
    //Save the current datetime to create the filename with.
    DateTime now = DateTime.Now;

    //Generate the name.
    return $"{CommonTools.RemoveSpecialCharacters(propName).Replace(" ","-")}-{now.Hour}{now.Second}{now.Millisecond}";
}

1 个答案:

答案 0 :(得分:0)

通常此错误一般错误// ========================================================================= // LDAP Login ============================================================== // ========================================================================= var opts = { server: { url: 'ldap://<ldap server address>:389', bindDn: 'cn=ldap-read-only-admin,OU=XX1, OU=XX2, DC=domain, DC=local', bindCredentials: 'password', searchBase: 'OU=XX1, OU=XX2, DC=domain, DC=local', searchFilter: '(sAMAccountName={{username}})', // passReqToCallback : true } }; passport.use('ldap-login', new LdapStrategy(opts, function(user, done) { console.log("Passport LDAP authentication."); done(null, user); } )); 表示文件或路径不存在:

因此,请尝试检查目录是否存在,或者如果不存在则创建它。然后仔细检查您是否已经存在具有相同名称的文件或是否存在完整路径:

尝试:

occurred in GDI+

希望它可以帮到你