這裏主要是講的後臺,所以前臺就簡單描述一下不給代碼了~~~
上傳:前臺可以用form表單提交的方式提交圖片。
展示下載:方法1:可以通過img組件的src訪問後臺,後臺返回一個OutputStream,瀏覽器會自動顯示爲圖片。至於下載嘛~~你懂得~~~;方法2:通過將圖片轉換爲Base64碼 直接返回個前臺(看得見)。
刪除:後臺需要得到圖片的路徑和文件名就OK了,方法不限
後臺代碼:
上傳:
public void upload(File file, String fileName,String dir){ //文件 上傳後的文件名 上傳後的路徑
FTPClient ftpClient = new FTPClient();
//與ftp服務器建立連接
try {
ftpClient.setControlEncoding(Constant.FTP_ENCODING); // 中文支持
ftpClient.connect(ftpHost); //ftp服務器地址
ftpClient.login(ftpUserName, ftpPassword); //賬號密碼
ftpClient.setDefaultPort(ftpPort); //端口
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); //使用二進制保存方式
ftpClient.enterLocalPassiveMode(); // 用被動模式傳輸
ftpClient.setDefaultTimeout(defaultTimeout);// 設置默認超時時間
ftpClient.setBufferSize(1024 * 1024 * 10); // 設置緩存區
//支持多級目錄 沒有則創建
if(!"".equals(dir))
{
String[] listD=dir.split("/");
for(String a:listD){
boolean chagenDirFlag=ftpClient.changeWorkingDirectory(a); //尋找目錄
if(chagenDirFlag==false){
boolean makeFlag= ftpClient.makeDirectory(a);
LogUtil.getAppLoger().info("創建文件目錄標誌:"+makeFlag);
chagenDirFlag=ftpClient.changeWorkingDirectory(a);
}
}
}
input = new FileInputStream(file);
up = ftpClient.storeFile(fileName, input);
System.out.println("上傳文件返回標誌:" + up + "上傳目錄" + dir + "文件名稱" + fileName);
ftpClient.disconnect();
}catch(Exception e){
e.printStackTrace();
ftpClient.disconnect();
}
}
刪除:
public boolean del(String fileName,String dir) {
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(ip, port);
ftpClient.login(loginName, pwd);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
}
ftpClient.changeWorkingDirectory(dir);
// 刪除
ftpClient.sendCommand("dele " + fileName + "\r\n");
} catch (SocketException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
} finally {
try {
ftpClient.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return true;
}
下載展示 方法一:OutputStream的方式
public boolean download(String fileName,String dir) {
OutputStream outputStream = ServletActionContext.getResponse.getOutputStream();
boolean flag=false;
try {
int reply;
FTPClient ftp = new FTPClient();
ftp.setControlEncoding("UTF-8"); // 中文支持
ftp.connect(ip);
ftp.login(loginName, pwd);
ftp.setDefaultPort(port);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
ftp.setDefaultTimeout(30000);// 設置默認超時時間
ftp.setBufferSize(1024*1024);//設置緩存區,默認緩衝區大小是1024,也就是1K
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
}
flag=ftp.changeWorkingDirectory(dir);//轉移到FTP服務器目錄
LogUtil.getAppLoger().info("切換目錄"+flag);
try {
flag=ftp.retrieveFile(fileName, outputStream);
LogUtil.getAppLoger().info("查詢文件"+fileName+"目錄"+dir+"結果"+flag);
System.out.println("查詢文件"+fileName+"目錄"+dir+"結果"+flag);
outputStream.flush();
outputStream.close();
} catch (Exception e) {
ftp.disconnect();
e.printStackTrace();
return false;
}
ftp.disconnect();
} catch (Exception e) {
return false;
}
return true;
}
下載展示 方法二:將圖片轉爲base64碼返回給前臺,將會是一個超長的string~~
public String download(String path, String fileName) {
InputStream is = null;
ByteArrayOutputStream bos = null;
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(ip, port);
ftpClient.login(loginName, pwd);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
}
path = replaceAll(path);
changeDirectory(path);
is = ftpClient.retrieveFileStream(fileName);// 獲取遠程ftp上指定文件的InputStream
if (null == is) {
throw new FileNotFoundException(fileName);
}
bos = new ByteArrayOutputStream();
int length;
byte[] buf = new byte[2048];
while (-1 != (length = is.read(buf, 0, buf.length))) {
bos.write(buf, 0, length);
}
ByteArrayInputStream fis = new ByteArrayInputStream(
bos.toByteArray());
bos.flush();
is.close();
bos.close();
byte[] buffer = new byte[fis.available()];
int offset = 0;
int numRead = 0;
while (offset < buffer.length && (numRead = fis.read(buffer, offset, buffer.length - offset)) >= 0) {
offset += numRead;
}
if (offset != buffer.length) {
throw new IOException("Could not completely read file ");
}
fis.close();
BASE64Encoder encoder = new BASE64Encoder();
imgStr = encoder.encode(buffer);
return imgStr; //超長的
} catch (Exception e) {
AppLogUtil.getAppLoger().error("ftp通過文件名稱獲取遠程文件流", e);
} finally {
try {
close();
is.close();
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
後臺返回base64碼的話,前臺應該這麼寫:
<img src="data:image/jpeg;base64,"+imgStr> <!--前面的一段爲比寫 imgStr就是後臺返回的base64碼-->
FTPClient和Base64都需要jar包的,自己找吧 多的是~~
注:第一次寫博客 難免會有疏漏 不懂的歡迎來問~~