java文件壓縮上傳
用java代碼壓縮應用到程序了,代碼一般是比較復雜的,對pdf文件的mate標簽優化,這類標簽包括三類,pdf文件不是網頁就是個文件,何況我們可以用pdf壓縮工具壓縮,下面有個解決方法,樓主可以做參照。
1:點擊打開工具,打開主頁面上有三個功能進行選擇,我們選擇pdf文件壓縮。
② java伺服器如何對zip文件分包上傳
這個你是用什麼客戶端上傳呢?
java寫的客戶端和H5頁面都可以做這個操作,思路都是一樣的。
把文件切割再上傳,後台接受結束後再把文件合並。
在DB里做個記錄就是斷點續傳了嘛。
給點代碼提示:
js:
每次上傳2M,必須是支持H5的瀏覽器才行,兼容的問題需要注意!
functioncalculate(file,callBack){
varfileReader=newFileReader(),
blobSlice=File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice,
chunkSize=2097152,
//readinchunksof2MB
chunks=Math.ceil(file.size/chunkSize),
currentChunk=0,
spark=newSparkMD5();
fileReader.onload=function(e){
spark.appendBinary(e.target.result);//appendbinarystring
currentChunk++;
if(currentChunk<chunks){
loadNext();
}
else{
callBack(spark.end());
}
};
functionloadNext(){
varstart=currentChunk*chunkSize,
end=start+chunkSize>=file.size?file.size:start+chunkSize;
fileReader.readAsBinaryString(blobSlice.call(file,start,end));
};
loadNext();
}
java代碼沒什麼注釋,也不是全部的代碼看個大概意思,理解一下吧
根據文件的MD5碼來判斷每次上傳的文件是不是上傳過的。
如果是就找到上次的點告訴前台從哪開始上傳。
Messagemessage=newMessage();
PrintWriterout=response.getWriter();
=newServiceBreakpointUpload();
BreakpointShardshard=newBreakpointShard();
StringcurrentShardIndex="";
StringtotalShard="";
StringfileMD5="";
StringfileName="";
StringfileType="other";
try{
fileMD5=request.getParameter("fileMD5");
Partpart=request.getPart("fileData");
currentShardIndex=request.getParameter("currentShardIndex");
totalShard=request.getParameter("totalShard");
fileName=request.getParameter("fileName");
fileName=newString(fileName.getBytes("iso-8859-1"),"UTF-8");
fileType=request.getParameter("fileType");
StringtypeFolderName=service.getTypeFolder(fileType);
StringfolderPath=getServletContext().getRealPath("/upload/")+typeFolderName+File.separator;
Stringpath=folderPath+fileName+"-"+fileMD5+"-"+currentShardIndex;
System.out.println("fileName:"+fileName);
//是否初次上傳
if(!service.isUpload(fileMD5,fileType)){
BreakpointFilebreakpointFile=newBreakpointFile();
breakpointFile.setMd5(fileMD5);
breakpointFile.setFile_name(fileName);
breakpointFile.setTotal_shard(totalShard);
breakpointFile.setCurrent_shard_index(currentShardIndex);
breakpointFile.setFile_type(fileType);
breakpointFile.setPath(folderPath);
service.saveFile(breakpointFile);
}else{//返回上次完成位置
service.updateFile(fileMD5,currentShardIndex,fileType);
System.out.println("uploadshard"+currentShardIndex+"OK");
}
shard.setMd5(fileMD5);
shard.setShard_index(currentShardIndex);
shard.setPath(path);
service.saveShardFile(shard);
part.write(path);
if(currentShardIndex.equals(totalShard)){//上傳完成
System.out.println("");
service.mergeFiles(fileMD5,fileType);
System.out.println("mergeshardOK");
message.setData("completed");
}
message.setData(currentShardIndex);
out.println(JSONObject.fromObject(message).toString());
}catch(Exceptione){
e.printStackTrace();
message.setHasError(true);
message.setErrorMessage("錯誤!");
out.println(JSONObject.fromObject(message).toString());
}
}
③ java壓縮文件傳輸的怪問題
那可能是編碼的問題啊
我們在開發項目的時候,特別是B/S系統,經常會遇到要批量上傳文件的需求,對此需求一般有如下幾個解決方案(以B/S為例):1. 在客戶端提供文件上傳介面,一次上傳一個文件2. 一次上傳多個文件3. 將需要上傳的文件打包,一次上傳到伺服器,並自動解壓到指定目錄1,2方法都有幾個很明顯的不足,用戶工作量大,文件如果過大,在網路環境中,上傳的效率低下,另外文件在不同的目錄,是無法進行一次選擇上傳的.所以打包上傳就成為了比較流行的批量文件上傳的解決方案,下面就來一起討論一下在java中如何實現: 主要功能需求: a. 上傳文件,將文件保存在伺服器 b. 讀取伺服器上壓縮文件,解壓到指定目錄 下面就這兩個需求說說編碼實現上傳: 使用了smartupload開源程序 參考鏈接: http://hi..com/liuzy84/blog/item/556318f4fad1cc6fddc4741a.html
⑤ 今天上傳一個java代碼的rar壓縮文件,提示「文件存在安全風險,已取消上傳」,檢測沒病毒,如何處理
你好,說明文件真的存在風險,上傳都預掃描的,對文件進行格式壓縮 ,或者你的群違規被舉報
你可以用壓縮下,然後再上傳。可能後綴是有影響的。群是否被封禁等QQ群不能上傳文件的解決方法吧。具體內容如下:一:QQ沒有升級QQ軟體經過一段時間會有新的版本發布出來,新的版本中一般會有新的功能,老版本可能因為功能限制而QQ群不能上傳文件。那麼我們可以吧QQ更新到當前最新版本可以解決當前問題。二:軟體內部沖突如果更新到最新版QQ還不能解決問題的話就用下面方法,首先備份重要的QQ聊天記錄,再推出QQ軟體。在找到QQ安裝目錄,在安裝目錄中找到以你QQ號碼命名的文件夾,刪除此文件夾,在從新登陸QQ。三:QQ群共享如果還不能解決問題可能是群共享的問題了,在QQ群界面點擊「群社區」圖標,通過網頁找到QQ群共享,然後就能解決那麼QQ群不能上傳文件為問題了,四:系統問題重啟電腦後如果還不行可能是系統出現問題了,還原系統或者從新安裝系統即可。這就是小編對那麼QQ群不能上傳文件怎麼辦的解決方法,希望對你有所幫助。
騰訊電腦管家企業平台:http://..com/c/guanjia/
⑥ java 如何壓縮文件
樓主是說解壓了的文件大小隻有33.1MB,但是卻佔了51.2MB的空間嗎?
如果是這個意思的話,那我要告訴樓主,首先這個問題和JAVA沒有關系,根據你的截圖,可以斷定你用的是FAT32文件系統。這只是文件存儲的形式,很正常。
簡單的說,磁碟存儲數據的最小單位是簇,比方說你的簇大小為128K,一個簇只能存放一個文件,然後你的一個文件只有16K,它佔了這個簇,然後還有112K沒有用,是吧。但是那112K就不能再存放其它文件了。如果要存放其它文件,就要佔另一個簇。
樓主,懂了吧,這跟簇的大小有關,但是也不是簇越小越好,簇越小,讀寫性能都有所下降。這是正常現象。如果你非覺得不舒服,那就用NTFS文件系統吧,把壓縮打開,就不會有這種情況了,希望對你有幫助
⑦ java中的壓縮原理是什麼
什麼是壓縮文件?
簡單的說,就是經過壓縮軟體壓縮的文件叫壓縮文件,壓縮的原理是把文件的二進制代碼壓縮,把相鄰的0,1代碼減少,比如有000000,可以把它變成6個0
的寫法60,來減少該文件的空間。
■怎麼壓縮文件?
首先要安裝壓縮軟體,現在比較流行的是WinRAR「一種高效快速的文件壓縮軟體(中文版)」。
其次是建立一個壓縮包:選擇你要製作成壓縮包的文件或文件夾,當然你也可也多選,方法同資源管理器,也就是按住Ctrl或Shift再選擇文件(文件夾)。
選取完畢之後,就可以單擊工具欄上的「壓縮」按鈕,在這里你可以選擇壓縮格式:RAR和ZIP。
如果你想得到較大的壓縮率,建議選擇RAR格式。
各個選項選擇好以後,單擊確定按鈕就開始製作壓縮包了,非常方便。有時候大家會遇到這個問題,就是你在一個論壇里要上傳一些文件壓縮包,壓縮包大小有3M,但是論壇限制會員上傳大小隻有2M,怎麼辦呢?
其實辦法很簡單,就是在你壓縮這個文件時,分成幾個帶分卷壓縮包,分卷包大小設置為2M即可,比如:原來文件名為123.rar(3M),壓縮成分卷包後為123.part1.rar(2M)與123.part2.rar(1M)兩個文件,這樣你就可以上傳了。
具體方法如下:
1、在要壓縮的文件上點右鍵
2、添加到壓縮文件....
3、選常規
4、壓縮方式選最好
5、批定壓縮分卷大小(按位元組計算),1M
=
1024K,1K
=
1024位元組,填寫數字即可
當你下載了帶有分卷的壓縮包後,如何解壓文件呢?
具體方法如下:
1、把所有的壓縮分卷全部下載完整
2、所有分卷必須在同一個文件夾內
3、然後雙擊解壓第一個分卷,即可
註:分卷解壓的文件必須是連續的,若分卷未下載完整,則解壓時自然會提示需要下一壓縮分卷
⑧ 上傳圖片,實現圖片壓縮 java.lang.IllegalArgumentException: Can't load standard profile: GRAY.pf
servlet代碼:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jspsmart.upload.File;
import com.jspsmart.upload.Files;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
public class FileUpload extends HttpServlet {
//定義一個ServletConfig對象
private ServletConfig sc;
/**
* Constructor of the object.
*/
public FileUpload() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
response.setContentType("text/html;charset=utf8");
PrintWriter out = response.getWriter();
//新建一個SmartUpload對象,接收用戶上傳文件
SmartUpload su = new SmartUpload();
su.initialize(sc, request, response);
su.upload();
Files fs = su.getFiles();
File frist = fs.getFile(0);
String filename = frist.getFileName();
String sctm = System.currentTimeMillis()+"";
//獲得文件的擴展名
String ext = frist.getFileExt();
//把文件保存到伺服器硬碟(以系統毫秒數命名)
frist.saveAs("/"+sctm+"."+ext);
String username = su.getRequest().getParameter("username");
System.out.println(username);
out.flush();
out.close();
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void init(ServletConfig sc) throws ServletException {
// Put your code here
this.sc = sc;
}
}
jsp代碼:
<body>
<form action="fileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="fileXXX" /><!-- 不懈這個name就接收不到,使用不到 -->
用戶名:<input type="text" name="username" />
<br/>
<input type="submit" />
</form>
</body>