-1

jsp で、BD からファイルを取得し、クライアントにダウンロードしたい:

<%
String num = request.getParameter("param");
Statement sta = null;
sta = conn.createStatement();
String fileName="";
String sql=("SELECT files,filename FROM filestock WHERE num =(SELECT filestock_id FROM parcels_temp WHERE num="+num+")");
ResultSet rs=sta.executeQuery(sql);
while(rs.next()){
    byte[] file = rs.getBytes("files");
    fileName=rs.getString("filename");
}
FileOutputStream fs = new FileOutputStream(new File(fileName));
BufferedOutputStream bs = new BufferedOutputStream(fs);
bs.write(file);
bs.close();
fs.close();
rs.close();
ps.close();
%>

PDFファイルにします。いくつか質問があります:
1. ファイルを JavaScript に送信するためにファイルをどうするか。
2. ExtJs 3.4 または JavaScript を使用してこのファイルを保存できますか?

アップデート

今、サーバーからクライアントにファイルを送信しようとしています:

<%
String num = request.getParameter("param");
Statement sta = null;
sta = conn.createStatement();
String fileName="";
byte[] file=null;
int bufferSize = 8192;
String sql=("SELECT files,filename FROM filestock WHERE num =(SELECT filestock_id FROM parcels_temp WHERE num="+num+")");
ResultSet rs=sta.executeQuery(sql);
while(rs.next()){
    file = rs.getBytes("files");
    fileName=rs.getString("filename");
}
File dFile=new File(fileName);
InputStream in1 = request.getInputStream();
int read;
while ((read = in1.read(file, 0, bufferSize)) != -1) {
    out.write(file, 0, read);
}
sta.close();
rs.close();
conn.close();
%>

しかし、エラーが発生します:

The method write(char[], int, int) in the type Writer is not applicable for the arguments (byte[], int, int)

では、どうやってそれを行うのですか?

更新2

このコードを使用すると、エラーは発生しませんが、firebug では、サーバーがクライアントに何も送信しないことがわかります。

<%
String num = request.getParameter("param");
Statement sta = null;
sta = conn.createStatement();
String fileName="";
byte[] file=null;
int bufferSize = 8192;
String sql=("SELECT files,filename FROM filestock WHERE num =(SELECT filestock_id FROM parcels_temp WHERE num="+num+")");
ResultSet rs=sta.executeQuery(sql);
while(rs.next()){
    file = rs.getBytes("files");
    fileName=rs.getString("filename");
}
//File dFile=new File(fileName);
FileOutputStream fout = fout = new FileOutputStream(fileName);
//BufferedInputStream in1 = new BufferedInputStream(fout);
InputStream in1 = request.getInputStream();
int read;
while ((read = in1.read(file, 0, bufferSize)) != -1) {
    fout.write(file, 0, read);
}
sta.close();
rs.close();
conn.close();
%>
4

1 に答える 1

0

Content-Dispositionヘッダー付きのダウンロード URL を作成するだけです。

さて、悪いニュースと良いニュースです(見方によって異なります)。JavaScript を介してユーザーのファイルシステムにファイルを保存することはできません (新しいFile-API を期待してください)。ただし、これによりファイルシステムがサンドボックス化されます。したがって、ブラウザにそのファイルを特定のパスに保存させることはできません。

于 2013-01-30T11:18:27.323 に答える