Java tutorial
/* * Copyright Yan Zhenjie. All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cn.hhh.myandroidserver.response; import android.os.Environment; import com.yanzhenjie.andserver.AndServerRequestHandler; import com.yanzhenjie.andserver.util.HttpRequestParser; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.ProgressListener; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.httpserv.HttpServFileUpload; import org.apache.commons.fileupload.httpserv.HttpServRequestContext; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.entity.StringEntity; import org.apache.http.protocol.HttpContext; import java.io.File; import java.io.IOException; import java.util.List; import java.util.Map; /** * <p>?</p> * Created on 2016/6/13. * * @author Yan Zhenjie. */ public class AndServerUploadHandler implements AndServerRequestHandler { @Override public void handle(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException, IOException { System.out.println("123"); if (HttpServFileUpload.isMultipartContent(request)) {//?? // ???? Map<String, String> params = HttpRequestParser.parse(request);//? // ? String saveUpLoadDirPath = Environment.getExternalStorageDirectory().getPath() + "/hhhService"; final File saveUpLoadDir = new File(saveUpLoadDirPath); if (!(saveUpLoadDir.exists() && saveUpLoadDir.isDirectory())) if (!saveUpLoadDir.mkdirs()) { response(400, "The server can not save the file.", response); return; } try { // ? processFileUpload(request, saveUpLoadDir); response(200, "Ok.", response); } catch (Exception e) { e.printStackTrace(); response(500, "Save the file when the error occurs.", response); } } else {// ?? response(403, "You must upload file, contentType is multipart/form-data.", response); } } /** * ??SD? * * @param request {@link HttpRequest}. * @param uploadDir ? * @throws Exception ??? */ private void processFileUpload(HttpRequest request, File uploadDir) throws Exception { FileItemFactory factory = new DiskFileItemFactory(1024 * 1024, uploadDir); HttpServFileUpload fileUpload = new HttpServFileUpload(factory); // ???handlerUI fileUpload.setProgressListener(new AndWebProgressListener()); List<FileItem> fileItems = fileUpload.parseRequest(new HttpServRequestContext(request)); for (FileItem fileItem : fileItems) { if (!fileItem.isFormField()) { // ? // fileItem.getContentType() File uploadedFile = new File(uploadDir, fileItem.getName()); // ? fileItem.write(uploadedFile); } } } /** * ???? * * @param responseCode ?? * @param message ?? * @param response ? * @throws Exception ???? */ private void response(int responseCode, String message, HttpResponse response) throws IOException { response.setStatusCode(responseCode); response.setEntity(new StringEntity(message, "utf-8")); } private class AndWebProgressListener implements ProgressListener { /** * . * * @param pBytesRead * @param pContentLength ??-1 * @param pItems 0?1 */ @Override public void update(long pBytesRead, long pContentLength, int pItems) { if (pContentLength != -1) { int progress = (int) (pBytesRead * 100 / pContentLength); } } } }