Я сохраняю некоторые данные в таблице. В таблице у меня есть столбец под названием 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.
Благодаря stuartd. Теперь я получаю путь к файлу в своей таблице. Теперь, как я могу преобразовать его в pdf и сохранить его в общий файл? – Somad
Существует множество опций для преобразования файлов Word в PDF] (https://www.google.co.uk/search?q=convert+word+document+to+pdf+c%23) – stuartd