Как решить проблему «Не удалось найти часть пути ..» на сервере - PullRequest
0 голосов
/ 24 октября 2019

Я использую библиотеку Zxing для создания штрих-кода и памяти, чтобы сохранить ее в папке на сервере. Все отлично работает как на локальном, так и на тестовом сервере, но когда я публикую код на клиент-сервере, он не создаст изображение штрих-кода и не получит местоположение изображения на этом сервере. Вот код, который я создал для этого процесса -

            var writer = new BarcodeWriter();
            writer.Format = BarcodeFormat.CODE_128;// QR_CODE;
            var result = writer.Write(printArray[0]);
            string path = Server.MapPath("/images/code/" + ComplaintId + ".jpg");    
            var barcodeBitmap = new Bitmap(result);
            using (MemoryStream memory = new MemoryStream())
            {
                using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite))
                {    
                    barcodeBitmap.Save(memory, ImageFormat.Jpeg);
                    byte[] bytes = memory.ToArray();
                    fs.Write(bytes, 0, bytes.Length);
                }
            }    

Этот код используется для сохранения штрих-кода на сервере.

 string ImagePath = ComplaintId + ".jpg";
 imgQRcode.Src = "~/images/code/" + ImagePath;

и использовал эту строку для привязки его к imgтег.

показывает ошибку вроде

Не удалось найти часть пути g: \ xyz \ images \ code \ 103.jpg

это происходит только на клиент-сервере, а не в других местах.

  • --------- Редактировать 1 --------

Поскольку при создании образа на хост-сервере у меня все еще возникали проблемы, сейчас я внес несколько изменений в код. Вместо сохранения изображения штрих-кода я преобразую его в строку Base64 и использую его.

Вот изменения кода

            var barWriter = new BarcodeWriter();
            barWriter.Format = BarcodeFormat.CODE_128;// QR_CODE;
            var barResult = barWriter.Write("printbar");                
            var barcodeBitmap = new Bitmap(barResult);
            string bs64 = ToBase64String(barcodeBitmap, ImageFormat.Jpeg);

и функция Tobase64String

public static string ToBase64String(Bitmap bmp, ImageFormat imageFormat)
    {
        string base64String = string.Empty;        
        MemoryStream memoryStream = new MemoryStream();
        bmp.Save(memoryStream, imageFormat);        
        memoryStream.Position = 0;
        byte[] byteBuffer = memoryStream.ToArray();
        memoryStream.Close();
        base64String = Convert.ToBase64String(byteBuffer);
        byteBuffer = null;
        return base64String;
    }

и функцияпривязать base64 к изображению

 public static string GetImageSrc(string base64Src)
    {
        return "data:image/png;base64," + base64Src;
    }

, чтобы передать его в iTextcharp использовать

byte[] imageBytes = Convert.FromBase64String(bs64);
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(imageBytes);
...