2017-09-11 4 views
0

J'utilise la balise cffile dans une application coldfusion 2016 (site web) pour télécharger des images de l'utilisateur vers le serveur.coldfusion core java au lieu de cffile

J'ai reçu l'ordre d'arrêter d'utiliser cffile et de commencer à utiliser le java sous-jacent à la place parce que c'est plus efficace.

i was given this code which shows how to take a dir of files and zip them with the core java. Mais n'était pas assez intelligent pour l'utiliser pour mes besoins.

J'ai besoin d'une page pour recevoir un POST simple et déplacer le fichier posté vers un répertoire spécifique sur le serveur. habituellement sur la page d'un site i utiliserais « action »:

cffile action="upload" filefield="FieldNameFromPostedForm" destination="MyDirectoryOnServer" 

quelqu'un peut me pointer dans une direction pour voir sous le capot de coldfusion pour que je puisse retrouver avec un peu de magie comme:

FileOutputStream = createobject("java", "java.io.FileOutputStream"); 

dans une fonction.

merci!

Rapport d'étape:
Je suis plus proche de ce qu'on m'a dit de le faire. le fichier est écrit sur le serveur mais je reçois une erreur après donc je manque un morceau du puzzle

<cfscript> 
function bj_script(source, server_dest_Path) { 
try { 
    FileOutputStream = createobject("java", "java.io.FileOutputStream"); 
    BufferedOutputStream = createobject("java", "java.io.BufferedOutputStream"); 
    FileInputStream = createobject("java", "java.io.FileInputStream"); 
    BufferedInputStream = createobject("java","java.io.BufferedInputStream"); 

    the_file = createobject("java","java.io.File"); 
    the_file.init(source); 

    FileInputStream.init(the_file); 
    BufferedInputStream.init(FileInputStream); 
    FileOutputStream.init(server_dest_Path); 
    BufferedOutputStream.init(FileOutputStream); 

    thisbyte = 0; 
    while (thisbyte neq -1){ 
     thisbyte = BufferedInputStream.read(); 
     if (thisbyte neq -1){ 
      BufferedOutputStream.write(thisbyte); 
     } 
    } 

    FileOutputStream.close(); 
    BufferedOutputStream.close(); 
    return true; 
} 
catch(Any exception) { 
    return exception; 
} 
} 
</cfscript> 

<form method="post" enctype="multipart/form-data"> 
<input type="File" name="test"><br> 
<input type="Submit"><br> 
</form> 

<cfif request_method is "post"> 
<cfset ccc = bj_script(form.test, "C:\inetpub\wwwroot\mywebsite\temp_img\blah.jpg") /> 
</cfif> 

après l'image dans mes téléchargements de test j'obtiens une erreur retour de type "java.io.IOException "avec le message étant" Stream Closed "
Je dois faire la boucle while incorrectement. Est-ce que les nerds de Java peuvent me dire quoi changer?

+1

Votre chaîne de recherche google est 'java upload file to server'. –

+2

Je suis curieux de savoir comment Java est plus efficace? Je peux penser à certains domaines, mais ce sont des scénarios spécifiques. Par exemple, si vous avez besoin de charger un très gros fichier en mémoire et d'effectuer une manipulation de chaîne, ColdFusion lira le fichier entier. Si vous copiez simplement d'un dossier à un autre, je suppose que CF utilise les mêmes flux de fichiers derrière les scènes qui écrivent des octets en les lisant. Avez-vous un point de référence pour vous assurer que votre version Java améliore réellement quelque chose? –

+0

non pas de benchmarks autres qu'un chronomètre de chronomètre brut sur un ensemble de 10 images en cours de téléchargement et de traitement. C'est la vieille histoire d'un autre codeur qui dit à mon patron que je le fais mal et maintenant ils me forcent à le changer. –

Répondre

2

Voici quelque chose que j'ai écrit il y a quelques années pour faire exactement la même chose avec ColdFusion ResultSet. Devrait servir d'amorce décent sur la façon de se connecter à une classe Java à partir de CF et écrire des fichiers.

https://cfprimer.blogspot.com/2009/01/coldfusion-fast-query-to-file-export.html

m'a ordonné de cesser d'utiliser cffile et commencer à utiliser Java sous-jacente à la place, car il est plus efficace.

Il peut être utile de souligner que CFFile utilise également le Java sous-jacent pour écrire le fichier?

+0

CFFile utilise aussi le Java sous-jacent: oui, j'ai essayé de le dire à mes patrons mais ils ne l'avaient pas. –