Может загружать изображения с помощью ASP.NET WEB API, но не при развертывании - PullRequest
0 голосов
/ 27 октября 2019

Я использую ASP.NET WEB API для загрузки изображения на сервер. Но когда я загружаю исходный код моего веб-API на gearhost.com и делаю запрос на публикацию. Я не могу опубликовать изображение. Это код моего контроллера веб-API:

[Route("upload")]
[HttpPost]
public async Task<string> Upload()
{
    var ctx = HttpContext.Current;
    var root = ctx.Server.MapPath("/uploads/");
    var provider = new MultipartFormDataStreamProvider(root);

    try
    {
        await Request.Content
                .ReadAsMultipartAsync(provider);

        foreach (var file in provider.FileData)
        {
            var name = file.Headers
                           .ContentDisposition
                           .FileName;

            // remove double quotes from string.
            name = name.Trim('"');

            var localFileName = file.LocalFileName;
            var filePath = Path.Combine(root, "files", name);

            // File.Move(localFileName, filePath);
            // SaveFilePathSQLServerADO(localFileName, filePath);
            // SaveFileBinarySQLServerADO(localFileName, name);

            // SaveFilePathSQLServerEF(localFileName, filePath);
            SaveFileBinarySQLServerEF(localFileName, name, filePath);

            if (File.Exists(localFileName))
                File.Delete(localFileName);
        }
    }
    catch 
    {
        return "Error";
    }

    return "File uploaded successfully!";
}

public void SaveFileBinarySQLServerEF(string localFile, string fileName, string filePath)
{
    // 1) Get file binary
    byte[] fileBytes;

    using (var fs = new FileStream(localFile, FileMode.Open, FileAccess.Read))
    {
        fileBytes = new byte[fs.Length];
        fs.Read(fileBytes, 0, Convert.ToInt32(fs.Length));
    }

    // 2) Create a Files object
    var file = new tblimage()
                   {
                       Data = fileBytes,
                       Names = fileName,
                       ContentType = filePath
                   };

    // 3) Add and save it in database
    using (var ctx = new coachEntities())
    {
        ctx.tblimages.Add(file);

        ctx.SaveChanges();
    }
}

Вот успешный вызов с localhost:

Изображение отправлено через localhost

Однако при развертываниитот же код и сделать запрос через почтальона, тогда я получаю эту ошибку:

Изображение, отправленное через живой сервер

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Хотя не рекомендуется возвращать детали исключения в живой код. Как вы не ведете журнал. Для тестирования, пожалуйста, верните детали исключения. Кроме того, как вы получаете ответ типа «невозможно загрузить, попробуйте снова», потому что его нет в вашем коде

0 голосов
/ 27 октября 2019

Возможно, у «uploads» нет разрешения на запись. Проверьте разрешение в вашей папке для загрузки. Перейдите в свойства - безопасность. Дайте разрешение на запись для чтения.

...