Преобразование Word Doc в PDF в Coldfusion - PullRequest
0 голосов
/ 22 февраля 2019

Работа на странице, которая отображает Стандартные рабочие процедуры (SOP) и позволяет не администратору загружать SOP в файл PDF.Клиенты решили, что они не хотят, чтобы администраторы ограничивались загрузкой только файлов PDF, и им нужна возможность загружать файлы .doc и .docx.Мне нужна ссылка на скачивание для создания PDF.

Прямо сейчас загрузка либо .doc / .docx, либо .pdf будет отображаться так, как я хочу, используя Google Viewer.Но когда я пытаюсь загрузить тестовый файл, его нельзя открыть, если загруженные файлы были .doc / .docx.Я просмотрел это и уверен, что упускаю что-то глупое.

Я использую cfdocumnet , как было предложено по другому вопросу.

Ссылка для скачивания:

<cfoutput>
   <li class="active">                 
      <ahref="/files/SOP/SOP.pdf" 
        download="SOP.pdf" target="_blank">Download SOP</a>
   </li>
</cfoutput>

Проверка для администратора (переменная создается в другом месте) и формы для загрузки файла:

<cfif isAdmin>
  <h3>Upload New SOP</h3>
  <cfparam name="form.fileUpload" default="">
  <cftry>
    <cffile action="upload"
        fileField="fileUpload"
        destination="#expandPath('.')#\files\SOP\"
        accept="application/pdf,
             application/msword,
             application/vnd.openxmlformats-officedocument.wordprocessingml.document,
             application/x-tika-msoffice"
        nameconflict="OVERWRITE">

    <cfset fileName=CFFILE.serverfile>

    <cfdocument 
          format="PDF"
          srcfile="#expandPath('.')#\files\SOP\#fileName#"
          filename="#expandPath('.')#\files\SOP\SOP.pdf"
          overwrite="YES">
    </cfdocument>
    <p>Thank you, your file has been uploaded.</p>
    <cfoutput>#fileName#</cfoutput>

    <form enctype="multipart/form-data" method="post">
      <input type="file" name="fileUpload"/>
      <input type="submit" name="submit" value="Upload File"/>
    </form>
    <cfcatch type="any">
      <!--- file is not written to disk if error is thrown  --->
      <!--- prevent zero length files --->
      <cfif FindNoCase("No data was received in the uploaded", cfcatch.message)>
        <p>No data was received in the uploaded file.</p>
      <!--- prevent invalid file types --->
      <cfelseif FindNoCase("The MIME type or the Extension of the uploaded file", cfcatch.message)>
        <p>Invalid file type. Please upload file as a PDF or Word Doc</p>
      <!--- prevent empty form field --->
      <cfelseif FindNoCase("did not contain a file.", cfcatch.message)>
        <p>Please seclect a PDF to upload.</p>
      <!---all other errors --->
      <cfelse>
        <p>Unhandled File Upload Error</p>
        <cflog type="Error" file="#application.applicationname#_dcnsopupload_error" text="#cfcatch.Message# - #cfcatch.Detail#" />
        <cfoutput>#cfcatch.Detail#</cfoutput>
      </cfif>
    </cfcatch>
  </cftry>
</cfif>

И на заметку, потому что я хочу, чтобы загружаемый .pdf имел имя "SOP.pdf", есть ли способ удалить загруженный пользователемфайл после переименования и преобразования?Просто на сервере нет 30 разных устаревших документов SOP.

1 Ответ

0 голосов
/ 26 февраля 2019

Код загрузки формы выглядит неправильно.Из-за cfparam, вероятно, он пытается запустить загрузку / преобразование до того, как форма будет отправлена.Удалите cfparam и используйте structKeyExists () , чтобы убедиться, что поле файла было отправлено, прежде чем пытаться его обработать.

Сначала попробуйте упростить пример, используя только форму и код загрузки (без обработки ошибок).

<!--- If file was uploaded, process it ---> 
<cfif structKeyExists(FORM, "fileUpload")> 

    <cffile action="upload"
        fileField="fileUpload"
        destination="#GetTempDirectory()#"
        accept="application/pdf,application/msword,
        application/vnd.openxmlformats-officedocument.wordprocessingml.document,
        application/x-tika-msoffice"
        nameconflict="makeunique">

    <cfset savedFilePath = cffile.serverDirectory &"/"& cffile.serverFile>

    <!--- 
        more file validation here ... 
    --->

    <!--- convert file ---> 
    <cfdocument format="PDF"
        srcfile="#savedFilePath#"
        filename="#expandPath('.')#\files\SOP\SOP.pdf"
        overwrite="YES">
    </cfdocument>

    <!--- cleanup temp file --->
    <cfif fileExists(uploadedFile)>
        <cfset fileDelete(uploadedFile)>
    </cfif>

<!--- Otherwise, just display the form ---> 
<cfelse>
    <form enctype="multipart/form-data" method="post">
        <input type="file" name="fileUpload"/>
        <input type="submit" name="submit" value="Upload File"/>
    </form>
</cfif> 

Кроме того, хотя некоторые из этих советов по обеспечению безопасности загрузки файлов приведены нижепо-прежнему действует (например, не загружает файлы в корневой каталог):

...