2016-11-10 3 views
1

Я сохраняю некоторые данные в таблице. В таблице у меня есть столбец под названием AttachedDocumentNo, который будет PDF-файлом. Хорошо, вот моя таблица:Преобразование файла документа в pdf в C# web api

CREATE TABLE tblRequirementType(
    [pkId] [bigint] IDENTITY(1,1) NOT NULL, 
    [szDescription] [varchar](max) NULL, 
    [iRequirementTypeId] [bigint] NOT NULL, 
    [szRequirementNumber] [varchar](100) NULL, 
    [szRequirementIssuer] [varchar](200) NULL, 
    [szOrganization] [varchar](250) NULL, 
    [dIssuedate] [datetime] NULL, 
    [dExpirydate] [datetime] NULL, 
    [szSignedBy] [varchar](250) NULL, 
    [szAttachedDocumentNo] [varchar](200) NULL, 
    [dStampdate] [datetime] NULL, 
    [szSubject] [varchar](250) NULL, 
    [iApplicationDetailsId] [bigint] NULL, 
    [iEmpId] [bigint] NULL, 
    CONSTRAINT [PK_tblRequirementType] PRIMARY KEY CLUSTERED 
    (
     [pkId] ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

    GO 

    SET ANSI_PADDING OFF 
    GO 

    ALTER TABLE [dbo].[tblRequirementType] ADD CONSTRAINT [DF_tblRequirementType_iRequirementTypeId] DEFAULT ((-1)) FOR [iRequirementTypeId] 
    GO 

    ALTER TABLE [dbo].[tblRequirementType] ADD CONSTRAINT [DF_tblRequirementType_szSubject] DEFAULT ('') FOR [szSubject] 
    GO 

    ALTER TABLE [dbo].[tblRequirementType] ADD CONSTRAINT [DF_tblRequirementType_iAppId] DEFAULT ((-1)) FOR [iApplicationDetailsId] 
    GO 

    ALTER TABLE [dbo].[tblRequirementType] ADD CONSTRAINT [DF_tblRequirementType_iEmpId] DEFAULT ((-1)) FOR [iEmpId] 
    GO 

Поэтому я создал веб-службу api для отправки данных в таблицу. Ниже мой API класс:

[Route("PostRequirementTypeProcessing")] 
    public IEnumerable<NPAAddRequirementTypeProcessing> PostRequirementTypeProcessing(mdlAddAddRequirementTypeProcessing requTypeProcess) 
    { 
     mdlAddAddRequirementTypeProcessing rTyeProcessing = new mdlAddAddRequirementTypeProcessing(); 

     HttpFileCollection hfc = HttpContext.Current.Request.Files; 

     //Filename = requTypeProcess.szSubject; 
     rTyeProcessing.szDescription = requTypeProcess.szDescription; 
     rTyeProcessing.iRequirementTypeId = requTypeProcess.iRequirementTypeId; 
     rTyeProcessing.szRequirementNumber = requTypeProcess.szRequirementNumber; 
     rTyeProcessing.szRequirementIssuer = requTypeProcess.szRequirementIssuer; 
     rTyeProcessing.szOrganization = requTypeProcess.szOrganization; 
     rTyeProcessing.dIssuedate = requTypeProcess.dIssuedate; 
     rTyeProcessing.dExpirydate = requTypeProcess.dExpirydate; 
     rTyeProcessing.szSignedBy = requTypeProcess.szSignedBy; 
     rTyeProcessing.szAttachedDocumentNo = requTypeProcess.szAttachedDocumentNo; 
     if (String.IsNullOrEmpty(rTyeProcessing.szAttachedDocumentNo)) 
     { 

     } 
     else 
     { 
      UploadFiles(hfc); 
     } 
     rTyeProcessing.szSubject = requTypeProcess.szSubject; 
     rTyeProcessing.iApplicationDetailsId = requTypeProcess.iApplicationDetailsId; 
     rTyeProcessing.iEmpId = requTypeProcess.iEmpId; 

     NPAEntities context = new NPAEntities(); 
     Log.Debug("PostRequirementTypeProcessing Request traced"); 

     var newRTP = context.NPAAddRequirementTypeProcessing(requTypeProcess.szDescription, requTypeProcess.iRequirementTypeId, 
            requTypeProcess.szRequirementNumber, requTypeProcess.szRequirementIssuer, requTypeProcess.szOrganization, 
            requTypeProcess.dIssuedate, requTypeProcess.dExpirydate, requTypeProcess.szSignedBy, 
            requTypeProcess.szAttachedDocumentNo, requTypeProcess.szSubject, requTypeProcess.iApplicationDetailsId, 
            requTypeProcess.iEmpId); 

     return newRTP.ToList(); 
    } 

Что я хочу сделать то, что, при сохранении в базу данных, она должна сохранить все, но szAttachedDocumentNo должна быть сохранена в виде pdf-файл в его колонке.

Я сделал поиск в Интернете и получил кусок кода и попытался преобразовал его в моей потребности:

public string UploadFiles(HttpFileCollection strDocPath) 
    { 
     int iUploadedCnt = 0; 

     // DEFINE THE PATH WHERE WE WANT TO SAVE THE FILES. 
     string sPath = ""; 
     //sPath = System.Web.Hosting.HostingEnvironment.MapPath("~/locker/"); 

     sPath = Convert.ToString(ConfigurationManager.AppSettings["ProfilePath"]); 

     //HttpFileCollection hfc = HttpContext.Current.Request.Files; 
     HttpFileCollection hfc = strDocPath; 

     // CHECK THE FILE COUNT. 
     for (int iCnt = 0; iCnt <= hfc.Count - 1; iCnt++) 
     { 
      HttpPostedFile hpf = hfc[iCnt]; 

      if (hpf.ContentLength > 0) 
      { 
       // CHECK IF THE SELECTED FILE(S) ALREADY EXISTS IN FOLDER. (AVOID DUPLICATE) 
       if (!File.Exists(sPath + Path.GetFileName(hpf.FileName))) 
       { 
        // SAVE THE FILES IN THE FOLDER. 
        hpf.SaveAs(sPath + Path.GetFileName(hpf.FileName)); 
        iUploadedCnt = iUploadedCnt + 1; 
       } 
      } 
     } 

     // RETURN A MESSAGE (OPTIONAL). 
     if (iUploadedCnt > 0) 
     { 
      return iUploadedCnt + " Files Uploaded Successfully"; 
     } 
     else 
     { 
      return "Upload Failed"; 
     } 
    } 

Круто. Когда я запускаю код и передаю данные в swagger, у меня есть две разные проблемы:

1-Первая проблема - допустим, я создал файл docx в любом месте или в c:/на моей машине и передал данные как следует:

{ 
    "szDescription": "Business Registration", 
    "iRequirementTypeId": 30012, 
    "szRequirementNumber": "BR3363347G", 
    "szRequirementIssuer": "Environment Protection Agency", 
    "szOrganization": "Blue Ocean Limited", 
    "dIssuedate": "2014-02-09 00:00:00.000", 
    "dExpirydate": "2018-02-09 00:00:00.000", 
    "szSignedBy": "Somad", 
    "szAttachedDocumentNo": "C:\Files\Doc3.docx", 
    "szSubject": "Sub1", 
    "iApplicationDetailsId": 01 
    "iEmpId": 40021 
} 

У меня возникла ошибка: «Ссылка на объект не установлена ​​в экземпляр объекта». Для этой ошибки я знаю, что я куда-то передаю неправильные данные, и я понял, что после отладки кода он находится в 'szAttachedDocumentNo'. Поэтому я попробовал следующее, что мой второй выпуск:

2-Здесь я просто передал имя документа, который является «Doc3.docx». Все данные были сохранены в базе данных, что это не то, что я ищу:

{ 
    "szDescription": "Business Registration", 
    "iRequirementTypeId": 30012, 
    "szRequirementNumber": "BR3363347G", 
    "szRequirementIssuer": "Environment Protection Agency", 
    "szOrganization": "Blue Ocean Limited", 
    "dIssuedate": "2014-02-09 00:00:00.000", 
    "dExpirydate": "2018-02-09 00:00:00.000", 
    "szSignedBy": "Somad", 
    "szAttachedDocumentNo": "Doc3.docx", 
    "szSubject": "Sub1", 
    "iApplicationDetailsId": 01 
    "iEmpId": 40021 

}

Я просто Wnt способ преобразовать doc3.docx в строку в базе данных, пардон в таблице. ..

Спасибо, любая помощь будет оценена.

Somad Y.

ответ

0

Вам нужно бежать обратный слэш в пути:

"C:\\Files\\Doc3.docx" 

Ваш Json также отсутствует запятая в конце iApplicationDetailsId линии, и 01 не является допустимым Номер Json.

Действительно Json:

{ 
    "szDescription": "Business Registration", 
    "iRequirementTypeId": 30012, 
    "szRequirementNumber": "BR3363347G", 
    "szRequirementIssuer": "Environment Protection Agency", 
    "szOrganization": "Blue Ocean Limited", 
    "dIssuedate": "2014-02-09 00:00:00.000", 
    "dExpirydate": "2018-02-09 00:00:00.000", 
    "szSignedBy": "Somad", 
    "szAttachedDocumentNo": "C:\\Files\\Doc3.docx", 
    "szSubject": "Sub1", 
    "iApplicationDetailsId": 1, 
    "iEmpId": 40021 
} 
+0

Благодаря stuartd. Теперь я получаю путь к файлу в своей таблице. Теперь, как я могу преобразовать его в pdf и сохранить его в общий файл? – Somad

+0

Существует множество опций для преобразования файлов Word в PDF] (https://www.google.co.uk/search?q=convert+word+document+to+pdf+c%23) – stuartd

Смежные вопросы