サーバーにアップロードされたファイルを圧縮する方法

はじめに:このプロジェクトは、サーバAPIであるため、アップロードもサーバーなので、全体的なアイデアがあります

1、最初のサーバーをアップロードするzipファイルをアップロード

2、アップロードサーバ上のzipファイルを抽出します。

3、サーバー上のファイルアップロードプロセスの解凍(基本的にJSON文字列)

図4に示すように、インターフェースを通過するためのインタフェースコールJSON文字列、データベースの操作

一、html

<入力されたID = "discoverImg"タイプ= "ファイル" NAME = ""クラス= "layui入力">
の<input type = 'ボタン'クラス= "layui-BTN layui-BTN原色"のonclick = "getImg()"値= '生成图片'> </入力>

二、JS

機能getImg(){

VAR zipUpdate = $( "#zipId")[0] .files [0]; 
VAR FORMDATA =新しいいるFormData();
formData.append( "zipファイル"、zipUpdate)。
uploadZip(FORMDATA、コールバック)。

}

関数uploadZip(FORMDATA、コールバック){

$アヤックス({ 
URL: '/ uploadZip'、
方法: 'POST'、
非同期:偽
偽:PROCESSDATA
のcontentType:偽、
データ:FORMDATA、
成功:関数(結果){
コールバック(結果)
}
})

}

関数コールバック(結果){ 
IF(result.resultCode == 1){
VAR emojiName = $( "emojiName。")のval()。
。// VAR emojiPath = $( "emojiPath")のval();
VAR emojiProfile = $( "emojiProfile")のval();
VAR emojiEveryName = $( "emojiEveryName")のval();
VAR emojiPath = JSON.stringify(result.data); //将データ转化成のJSON文字列
Common.invoke({
パス: '追加/'
データ:{
'zipName':emojiName、
'zipPath':emojiPath、// JSON文字列
'zipProfile':emojiProfile、
'nameStr':emojiEveryName
}、


successCb:関数(結果){

}
}、
errorCb:関数(結果){
}
})。
}
}

三、ジャワ、

 //コードは、主に、アップロードにアクセス要求と分析結果を組み立てています

地図getUploadZipPath静的パブリック(文字列のドメイン、MultipartFile MultipartFile){ 
文字列NEWURL = NULL;
地図=新しい新mapImags HashMapの();
試み{
//改行
最後の改行文字列= "\ R&LT \ N-";
最終boundaryPrefix文字列= " - " ;
//分割ラインデータ定義
文字列BOUNDARY = "======== 7d4a6d158c9";
//のドメインネームサーバ
の新しい新しいURL =のURL(ドメイン+ "/アップロード/ UploadZipServlet")のURL;
HttpURLConnectionのCONN =(HttpURLConnectionの)URLを。 OpenConnectionメソッド();
//は状況Postに設定
conn.setRequestMethod( "POST")を;
//は、POSTリクエストは次の2行に設定しなければならない送信
;(真の)conn.setDoOutputを
conn.setDoInput(真の);
conn.setUseCaches(偽の);
//パラメータ設定要求ヘッダー
conn.setRequestProperty( "接続"、 "キープアライブ");
conn.setRequestProperty( "Charsert"、 "UTF-8");
conn.setRequestProperty(「のContentタイプ""マルチパート/フォームデータ;境界=「+境界);
OutputStreamのOUT =新しい新しいDataOutputStreamを(conn.getOutputStream());
//ファイルをアップロードする
文字列fileRealName = multipartFile.getOriginalFilenameを(); //元のファイル名を取得します。
StringBuilderの新しい新しいSB)が(のStringBuilderを=;
sb.append(boundaryPrefix);
sb.append(BOUNDARY);
sb.append(改行);
//ファイルのパラメータは、パラメータ名を変更する写真無料
sb.append( "コンテンツディスポジション:データ形式;名= \"ファイル\ ";ファイル名= \" "+ fileRealName +" \ "" +改行);
sb.append(「Content-Typeの:ファイルにapplication / octet -解釈されませんストリーム「);
// Endパラメーターの設定は2台のヘッドラップを必要とした後、次いで、パラメータ含有量が
sb.append(改行);
sb.append(改行);
//出力への書き込みデータヘッダパラメータは、ストリーム
アウト。 (。sb.toString()GetBytesメソッド())を書く;
//データ入力ストリームをファイルデータ読み込みのために
=新しい新しいDataInputStreamのではDataInputStreamを(multipartFile.getInputStream());
バイト[] = BUFFEROUT新しい新しいバイト[1024];
int型= 0バイト;
// 1キロバイトは、各ストリームデータを読み出し、出力するファイルのデータを書き込み
ながら、{(!(バイト= in.read(BUFFEROUT))= -1)
out.write(BUFFEROUT、0、バイト) ;
}
//追加最後ラップ
out.write(newLine.getBytes());
in.close();
//最終的なデータ分割線を定義即ち、 -一緒に境界線を追加- 。
バイト[] END_DATA =(+ boundaryPrefix改行BOUNDARY + + + boundaryPrefix改行).getBytes();
//書き込み終了識別
out.write(END_DATA);
out.flush();
out.close();
// BufferedReaderのを定義します読み込みURLの入力ストリームに対応して
BufferedReaderのリーダーBufferedReaderの新しい新=(InputStreamReaderの新新(conn.getInputStream()));
のためのJSONObjectでresultObj = JSON.parseObject(reader.readLine());
JSONObject resultData = resultObj.getJSONObject( "データ") ;
IF(resultData == null)の
スロー新新はServiceException( "ソースファイルが存在しません");
JSONArray imagesData = resultData.getJSONArray( "画像")。
JSONArray imagesDataOthers = resultData.getJSONArray( "ジッパー")。
一覧zipImags = Lists.newArrayList();
リストのzip = Lists.newArrayList();
(imagesData.size()> 0){もし
{(; iがimagesData.sizeを()<I ++は、I = 0の整数)のための
JSONObject画像データ= imagesData.getJSONObject(I)。
ストリングnewUrlO = imageData.getString( "oUrl")。
ストリングnewUrlT = imageData.getString( "tUrl")。
System.out.println( "新しいURLをアップロード=====>" + newUrlO)。
System.out.println( "新しいURLをアップロード=====>" + newUrlT)。

zipImags.add(NEWURL);
}
mapImags.put( "imags"、zipImags);
}
IF(imagesDataOthers.size()> 0){
JSONObject imageDataOthers = imagesDataOthers.getJSONObject(0);
文字列newUrlOthers = imageDataOthers.getString(「oUrl ");
zip.add(newUrlOthers);
mapImags.put(" ZIP "ZIP);
}

}キャッチ(例外E){
System.out.printlnは(" POST要求送信異常「+ E);!
e.printStackTrace ();
}
戻りmapImags;
}
//以下は主uploadZipサーブレットであり、Iは、ZIP圧縮、圧縮のいくつかの写真を渡し、描画画像は、元有します。主なステップは、以下の本質です。
@WebServlet( "/アップロード/ UploadZipServlet")
パブリッククラスUploadZipServletはBaseServlet {延び
プライベート静的最終長いのserialVersionUID = 1Lと、

パブリックUploadZipServlet(){
スーパー()。
}

@Overrideが
保護JMessageのハンドラ(HttpServletRequestのリクエスト、HttpServletResponseの応答){
長い)(=にSystem.currentTimeMillisを開始します。
DiskFileItemFactory工場=新しいDiskFileItemFactory(* 1024 * 1024 1000年、新しいファイル(getSystemConfig()getuTemp()));
ServletFileUploadのFileUpload =新しいServletFileUpload(工場)。
一覧<FileItem>マルチパート= NULL;

JMessage jMessage = NULL;
int型totalCountプロパティ= 0;
長いのuserId = 0;
ダブルvalidTime = 0;
試す{
マルチ= fileUpload.parseRequest(リクエスト)。
用(FileItem項目:マルチパート){
IF(item.isFormField()){
IF( "validTime" .equals(item.getFieldName())){
試み{
validTime =は、Double.valueOf(item.getString())。
}キャッチ(NumberFormatExceptionが電子){
validTime =新しいダブル(-1)。
}
}
( "はuserId" .equals(item.getFieldName())){場合
にuserId = Long.parseLong(item.getString())。
}
}他{
IF(item.getSize()> 0){
totalCountプロパティ++。
}
}
}
}キャッチ(例外e){
e.printStackTrace();
}
IF(ヌル==マルチパート){
jMessage =新しいJMessage(1020101、 "表单解析失败")。
}
そうであれば(0 == totalCountプロパティ){
jMessage =新しいJMessage(1010101、 "缺少上传文件")。
}
(ヌル= jMessageが!)の場合
jMessageを返します。
jMessage = defHander(マルチは、ユーザーID、validTime)。

int型successCount = jMessage.getIntValue( "成功");
jMessage.put( "合計"、totalCountプロパティ)。
jMessage.put( "失敗"、totalCountプロパティ- successCount)。
jMessage.put( "時間"、のSystem.currentTimeMillis() -開始)。

jMessageを返します。
}

保護JMessage defHander(一覧<FileItem>マルチパート、長いはuserId、ダブルvalidTime){
JMessage jMessage = NULL;
int型successCount = 0;
文字列oUrl = NULL;
文字列tUrl = NULL;
リスト<UploadItem>画像= Lists.newArrayList()。
一覧<UploadItem>オーディオ= Lists.newArrayList();
一覧<UploadItem>ビデオ= Lists.newArrayList();
一覧<UploadItem>他人= Lists.newArrayList();

UploadItem uploadItem;
(item.isFormFieldは()|| item.getSize()<1)であれば
続けます。
ストリングoFileName = item.getName()。
ストリングFORMATNAME = ConfigUtils.getFormatName(oFileName)。
ストリングnewFileName = ConfigUtils.getName(oFileName)。
文字列filename;
(もし!StringUtils.isEmpty(newFileName)&&!newFileName.equals(oFileName)){
fileNameに= 32 == newFileName.length()?oFileName: "( - ""、"、 "")、FORMATNAME Joiner.onは( ")。。。UUID.randomUUIDを()のtoString()(置き換え)に参加";
}他{
fileNameに= oFileName。
}
/ *文字列fileNameに= 32 == ConfigUtils.getName(oFileName).LENGTH()?oFileName: "(。。UUID.randomUUIDを()のtoString()(置き換える参加- ""、"、 "")、FORMATNAME)Joiner.on( ")"; * /
のFileTypeのfileType = getFileType(FORMATNAME)。
ファイル[] uploadPath = ConfigUtils.getUploadPath(userIdを、たfileType)。
OFILE =新しいファイル(uploadPath [0]、ファイル名)ファイル。
tFile =新しいファイル(uploadPath [1]、ファイル名)ファイル。
{試みる
FileUtils.transfer(item.getInputStream()、OFILE)を、
successCount ++;
oUrl =のgetURL(OFILE)。
IF(ConfigUtils.getSystemConfig()。isOsStatus()){
IF(。oUrl.contains(ConfigUtils.getSystemConfig()getDomain())){
文字列urlNewName = oUrl.replace(ConfigUtils.getSystemConfig()getDomain()、 "");
ストリングoUrlNew = FileOSUtil.uploadFile(OFILE、urlNewName)。
( "UploadServletアップロードOBSその他oUrl" + oUrlNew)のログ。
{(!oUrlNew = null)の場合は
oUrl = oUrlNew。
}
}
}
uploadItem =新しいUploadItem(oFileName、oUrl、(バイト)1、NULL);
ResourcesDBUtils.saveFileUrl(1、oUrl、-1)。
others.add(uploadItem)。
ログイン(+ oUrl "UploadServletは、アップロードされました");
試す{
ZipInputStreamジノ=新しいZipInputStream(新規のFileInputStream(oFile.getPath()))。
BufferedInputStreamをBINO =新しいBufferedInputStreamを(ジノ)。
ストリングParentO = uploadPath [0] .toString(); //输出路径(文件夹目录)
FOUT = nullのファイル。
またはZipEntry entryO;
{しようとし
ながら、((entryO = ZinO.getNextEntry())= NULL && entryO.isDirectory()!!){
FOUT =新しいファイル(ParentO、entryO.getName());
(もし!fout.exists()){
。(新しいファイル(fout.getParent()))mkdirs();
}
たFileOutputStream outO =新しいたFileOutputStream(FOUT)。
BufferedOutputStreamがBoutO =新しいBufferedOutputStreamが(outO)。
int型のB;
一方、(!(B = BinO.read())= -1){
BoutO.write(B)。
}
BoutO.close()。
outO.close();
System.out.println(FOUT + "解压成功");
FileInputStreamのFileInputStreamの=新しいFileInputStreamを(FOUT)。
MultipartFile multipartFile =新しいMockMultipartFile(fout.getName()、fout.getName()、ContentType.APPLICATION_OCTET_STREAM.toString()、のFileInputStream)。
画像= uploadImg(画像、multipartFileは、ユーザーID、validTime)。
}
BinO.close()。
ZinO.close();
}キャッチ(例外e){
e.printStackTrace();
}
}キャッチ(にFileNotFoundException電子){
e.printStackTrace();
}
}キャッチ(例外e){
e.printStackTrace();
uploadItem =新しいUploadItem(oFileName、ヌル(バイト)0、e.getMessage())。
others.add(uploadItem)。
}
}
マップの<string、オブジェクト>データ=新しいハッシュマップの<string、オブジェクト>();
data.put( "ジッパー"、その他)。
data.put( "画像"、画像)。
jMessage =新しいJMessage(1、NULL、データ)。
jMessage.put( "成功"、successCount)。
jMessageを返します。

}

{<UploadItem> uploadImg(一覧<UploadItem>画像、MultipartFileファイル、長いはuserId、ダブルvalidTime)一覧を保護
文字列oUrl = NULL;
文字列tUrl = NULL;
ストリングoFileName = file.getName()。
ストリングFORMATNAME = ConfigUtils.getFormatName(oFileName)。
ストリングnewFileName = ConfigUtils.getName(oFileName)。
文字列imgName;
(もし!StringUtils.isEmpty(newFileName)&&!newFileName.equals(oFileName)){
imgName = 32 == newFileName.length()?oFileName: "( - ""、"、 "")、FORMATNAME Joiner.onは( ")。。。UUID.randomUUIDを()のtoString()(置き換え)に参加";
}他{
imgName = oFileName。
}
のFileType imgType = getFileType(FORMATNAME)。
ファイル[] uploadImgPath = ConfigUtils.getUploadPath(userIdを、imgType)。
ファイルOFILE =新しいファイル(uploadImgPath [0]、imgName)。
ファイルtFile =新しいファイル(uploadImgPath [1]、imgName)。
UploadItem uploadItem;
試す{
FileUtils.transfer(file.getInputStream()、OFILE、tFile、FORMATNAME)。
oUrl =のgetURL(OFILE)。
tUrl =のgetURL(tFile)。
IF(ConfigUtils.getSystemConfig()。isOsStatus()){
IF(oUrl.contains(ConfigUtils.getSystemConfig()。getDomain())){
文字列urlNewName = oUrl.replace(ConfigUtils.getSystemConfig()。getDomain() "" );
ストリングoUrlNew = FileOSUtil.uploadFile(OFILE、urlNewName)。
ログイン(+ oUrlNew "UploadServletはOBS oUrlアップロード");
{(!oUrlNew = null)の場合は
oUrl = oUrlNew。
}
}
もし(tUrl.contains(ConfigUtils.getSystemConfig()getDomain())){
文字列urlNewName = tUrl.replace(ConfigUtils.getSystemConfig()getDomain()、 "");
ストリングurlNew = FileOSUtil.uploadFile(tFile、urlNewName)。
( "UploadServletアップロードOBS tUrl" + urlNew)のログ。
{(!urlNew = null)の場合は
tUrl = urlNew。
}
}
}
ResourcesDBUtils.saveFileUrl(1、oUrl、validTime)。
ResourcesDBUtils.saveFileUrl(1、Turl、validTime。);
( "UploadServletアップロード" + oUrl)ログ;
( "UploadServletアップロード" + Turl)ログ;
uploadItem =新しい新しいUploadItem(oFileName、oUrl、Turl、(バイト)1、NULL);
キャッチ}(例外E){
e.printStackTrace();
uploadItem =新しい新しいuploadItem(oFileName、ヌル(バイト)0、e.getMessage());
}
images.add(uploadItem);
イメージを返す;
}
}

別クラスは、処理するためのデータベースへのインタフェースである
、彼らは問題を解決することができ、その後最初のJSON文字列が、JSONオブジェクトに変換されます。
JSONObject JSON = JSONObject.parseObject(zipPath)。
地図マップ=(マップ)JSON。


 

おすすめ

転載: www.cnblogs.com/echo777/p/11311180.html