Generare file testo su client

Con il seguente codice:


def genera_file
@file_items = FileItem.find(:first, :conditions => “user_id =
‘#{session[:user_id]}’”)
mese = @file_items.riferimento
@file_items = FileItem.find(:all, :conditions => “user_id =
‘#{session[:user_id]}’”)
file =
File.new(“c:\file_#{mese}utente#{session[:user_id]}.txt”,“w”)
begin # per ensure
for file_item in @file_items
file.write file_item.tipologia
file.write file_item.regione
file.write file_item.riferimento
file.write file_item.identificativo
file.write file_item.istat_comune
file.write file_item.codice_struttura
file.write “\n”
end #for
ensure
file.close
end #ensure
flash[:notice] = ‘File generato.’
redirect_to :action => ‘list’
end


creo un file testo sul server
che poi provvedo a mandare tramite


send_file(“c:\file_c_#{mese}utente#{session[:user_id]}.txt”,
:disposition => ‘attachment’)
La domanda è la seguente:
Come posso generare il file direttamente sul client evitando di salvarlo
prima sul server?
E’ fattibile ?
Grazie in anticipo.

Dai un’occhiata a FasterCSV anche. Fa tutto quello che fa CSV, ma è
più lesto e fa anche altre robe.
:slight_smile:
Andrea R. wrote:

 ********************
 creo un file testo sul server
 che poi provvedo a mandare tramite
 **********************************
 send_file("c:\\file_c_#{mese}_utente_#{session[:user_id]}.txt",
 :disposition => 'attachment')
 La domanda è la seguente:
 Come posso generare il file direttamente sul client evitando di
 salvarlo
 prima sul server?
 E' fattibile ?
 Grazie in anticipo.

 Ti passo un codice di esempio che faceva l'esportazione in cvs su
 di alcuni
 dati.
 Mi faceva salvare il file direttamente sul client, quindi dovrebbe
 essere
 quello che cercavi.
 ----------
 def csv_export
    @invoices = params[:invoice]
    report = StringIO.new
    CSV::Writer.generate(report, ';') do |csv|
      @invoices.each do |invoice|
        csv << [invoice.type_invoice.descrizione]
      end
    end
    report.rewind
    send_data(report.read,
      :type => 'text/csv; charset=iso-8859-1; header=present',
      :filename => 'report.csv')
  end
 ----------

On 11/13/06, Sij [email protected] wrote:

begin # per ensure
 file.close

La domanda è la seguente:
Come posso generare il file direttamente sul client evitando di salvarlo
prima sul server?
E’ fattibile ?
Grazie in anticipo.

Se il client è un web browser, non c’è maniera di generare un file
sulla macchina del client, a meno di usare porcherie tipo ActiveX o
applet firmate. Questo perché Javascript sul client è
intenzionalmente limitato. Era questa la domanda?

Matteo

E’ fattibile ?
Grazie in anticipo.

Ti passo un codice di esempio che faceva l’esportazione in cvs su di
alcuni
dati.
Mi faceva salvare il file direttamente sul client, quindi dovrebbe
essere
quello che cercavi.


def csv_export
@invoices = params[:invoice]
report = StringIO.new
CSV::Writer.generate(report, ‘;’) do |csv|
@invoices.each do |invoice|
csv << [invoice.type_invoice.descrizione]
end
end

report.rewind
send_data(report.read,
  :type => 'text/csv; charset=iso-8859-1; header=present',
  :filename => 'report.csv')

end


Andrea R.

: : i’m a miner : : | therubymine.com

Matteo V. wrote:

Se il client � un web browser, non c’� maniera di generare un file
sulla macchina del client, a meno di usare porcherie tipo ActiveX o
applet firmate. Questo perch� Javascript sul client �
intenzionalmente limitato. Era questa la domanda?

Matteo
Ciao
Era questa la domanda?
Si!
un web browser
Si. IE oppure Firefox

Il problema nello specifico è questo:
Il database è unico e vi si collegano vari utenti.
Tutte le tabelle, tranne quelle comuni a tutti, hanno un campo user per
contrassegnare i record di appartenenza all’utente .
Ogni utente periodicamente deve generare un file testo di rendiconto
delle loro
operazioni, la procedura salva questo file sul server.
Con una successiva operazione l’utente esegue il dw del file
send_file(“c:\file_c_#{mese}utente#{session[:user_id]}.txt”,
:disposition => ‘attachment’)
per consegnare lo stesso file all’ufficio competente.
Per differenziare i file (evitando sovrascritture) li nomino nel
seguente modo:
File.new(“c:\file_#{mese}utente#{session[:user_id]}.txt”,“w”)
Se avessi la possibilità di generarlo sul client eviterei quanto sopra.
Grazie a tutti per le risposte.
Saluti
Gino.