そのため、クライアントがサーバーに無制限のファイルを送信する必要がある学校の宿題があります。こんな思いで作りました。
- クライアントは無制限のファイルをサーバーに送信します。
- サーバーは、クライアントによってアップロードされたファイルを私のワンプサーバーフォルダーにリダイレクトします
動作するコードがありますが、このコードはクライアントからサーバーに 1 つのファイルしか送信できません。私のコードでは1つのファイル名しか使用しないため、アップロードされたファイルのファイル名もインクリメントしたいので、より多くのクライアントがファイルをアップロードすると、古いファイル名が上書きされます。
例: file01.rar 次のアップロード file02.rar など。
ここに私のサーバーコードがあります:
public void run() {
filePath = "C:/wamp/www/file.rar";
byte[] aByte = new byte[1];
int bytesRead;
InputStream is = null;
try {
is = clientSocket.getInputStream();
} catch (IOException ie) {
ie.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (is != null) {
FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
fos = new FileOutputStream(filePath);
bos = new BufferedOutputStream(fos);
bytesRead = is.read(aByte, 0, aByte.length);
do {
baos.write(aByte);
bytesRead = is.read(aByte);
} while (bytesRead != -1);
bos.write(baos.toByteArray());
bos.flush();
bos.close();
} catch (IOException ie) {
ie.printStackTrace();
}
}
}
ここに私のクライアントコードがあります:
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(s.getOutputStream());
} catch (IOException ie) {
ie.printStackTrace();
}
if (bos != null) {
File uploadFile = new File(clientFacultyUploadTextField.getText());
byte[] myFileSize = new byte[(int)uploadFile.length()];
FileInputStream fis = null;
try {
fis = new FileInputStream(uploadFile);
} catch (FileNotFoundException fife) {
fife.printStackTrace();
}
BufferedInputStream bis = new BufferedInputStream(fis);
try {
bis.read(myFileSize, 0, myFileSize.length);
bos.write(myFileSize, 0, myFileSize.length);
bos.flush();
bos.close();
clientFacultyUploadTextField.setText("Upload complete...");
} catch (IOException ie) {
ie.printStackTrace();
}
}