java写的ftp服务器有问题?关于文件流
以下代码是服务器端的一部分。很疑惑的是,服务器可以实现正常的下载,但是,客户端上传的文件,文本文件能够打开,WORD,音乐,照片虽然上传成功了,但是打不开,有问题。但是,不论什么文件,下载的都是正常的,都可以正常打开。为什么?
我分析了一下代码,感觉用的流是二进行的输入输出流,为什么下载的时候什么文件都可以下载成功了?希望高手帮忙!!!!
private void sendFile() throws IOException {
int BUFFER_SIZE = 1024*10;
try {
Socket socket;
System.out.println("读取客户端的端口和IP地址...");
System.out.println(request.getIP());
System.out.println(request.getPort());
socket = new Socket(request.getIP(), request.getPort());
System.out.println("读取成功.....");
OutputStream output = socket.getOutputStream();
byte[] bytes = new byte[BUFFER_SIZE];
FileInputStream fis = null;
try {
File file = new File(workingDir.getPath(), request.getFilename());
System.out.println("下载的文件名是:"+request.getFilename());
System.out.println("目录是:"+workingDir.getPath());
if (file.exists()) {
fis = new FileInputStream(file);
int ch = fis.read(bytes, 0, BUFFER_SIZE);
while (ch!=-1) {
output.write(bytes, 0, ch);
output.flush();
ch = fis.read(bytes, 0, BUFFER_SIZE);
}
sendMsg("226 File sent ok.");
}
else {
// file not found
sendMsg("550 cannot open File: " + request.getFilename() + " : No Such File.");
}
}
catch (Exception e) {
// thrown if cannot instantiate a File object
System.out.println(e.toString() );
System.out.println("sendFile()错误!在response里面");
}
finally {
if (fis!=null)
fis.close();
}
socket.close();
}catch(Exception e)
{
System.out.println(e.toString() );
}
}
//receive file to current working directory
private void receiveFile() throws IOException {
int BUFFER_SIZE = 1024*10;
try {
Socket socket;
socket = new Socket(request.getIP(), request.getPort());
InputStream input = socket.getInputStream();
byte[] bytes = new byte[BUFFER_SIZE];
FileOutputStream fos = null;
try {
File file = new File(workingDir.getPath(), request.getFilename());
if (file.createNewFile()) {
fos = new FileOutputStream(file);
int ch = input.read(bytes, 0, BUFFER_SIZE);
while (ch!=-1) {
fos.write(bytes, 0, ch);
fos.flush();
ch = input.read(bytes);
}
sendMsg("226 File received ok.");
}
else {
// file can't write
sendMsg("550 cannot upload File:" + request.getFilename());
}
}
catch (Exception e) {
// thrown if cannot instantiate a File object
System.out.println(e.toString() );
}
finally {
if (fos!=null)
fos.close();
input.close();
}
socket.close();
}catch(Exception e)
{
System.out.println(e.toString() );
}
}