android studio / 佈局 在網上搬的磚 代碼加修改。。。
在這裏插入代碼片`
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@color/colorPrimary"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_height="60dp"
android:layout_marginTop="80dp"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="center_vertical"
android:gravity="center"
android:text="視頻名稱:"
android:textColor="#FF8899"
android:textSize="18dp"/>
<EditText
android:id="@+id/upload_video_name"
android:layout_width="280dp"
android:layout_height="50dp"
android:layout_gravity="center_vertical"
android:hint="請輸入上傳視頻名稱"
android:layout_marginLeft="5dp"
android:textSize="18dp"
/>
</LinearLayout>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="44dp"
android:layout_marginLeft="100dp"
android:layout_marginRight="100dp"
android:layout_marginTop="80dp"
android:text="選擇視頻"
android:textSize="20sp"/>
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="44dp"
android:layout_marginLeft="100dp"
android:layout_marginRight="100dp"
android:layout_marginTop="40dp"
android:text="點擊上傳"
android:textSize="20sp"/>
<TextView
android:id="@+id/post_text"
android:layout_marginTop="40dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="0" />
<ProgressBar
android:id="@+id/post_progress"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100" />
</LinearLayout>
activate… 在activate 點擊上傳的時候 發送兩個請求 一個是上傳視頻,一個是上傳視頻的第一幀 經過壓縮 裏面還有 幾個方法沒有用上 複製上無妨
package wlt.com.sdk;
import androidx.appcompat.app.AppCompatActivity;
import android.accounts.NetworkErrorException;
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.util.Log;
import wlt.com.sdk.utils.My_Okhtt3;
import wlt.com.sdk.utils.ProgressListener;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.MediaController;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.nio.charset.Charset;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import wlt.com.sdk.utils.HttpUtil;
import wlt.com.sdk.utils.kkk;
public class MainActivity extends AppCompatActivity {
private Button button, button1;
private String path = "";//文件路徑
private ProgressBar post_progress;
private TextView post_text;
EditText video_name;
private String str;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setTitle("視頻上傳");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
video_name = (EditText) findViewById(R.id.upload_video_name);
init();
onclick2();
onclick();
}
//初始化
public void init() {
post_progress = (ProgressBar) findViewById(R.id.post_progress);
post_text = (TextView) findViewById(R.id.post_text);
button = (Button) this.findViewById(R.id.button);//開始上傳
button1 = (Button) this.findViewById(R.id.button1);//選擇視頻
}
//setText
Handler handler=new Handler(new Handler.Callback() {
@Override
public boolean handleMessage( Message msg) {
if (msg.arg1==1){
video_name.setText(path);
return true;
}
return false;
}
});
## // 開始上傳
public void onclick() {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (path.equals("")) {
Toast.makeText(MainActivity.this, "請選擇視頻後,再點擊上傳!", Toast.LENGTH_LONG).show();
} else {
File file = new File(path);
String postUrl = "http://192.168.1.106:8080/img/voideoServlet1";
//這個是上傳視頻
HttpUtil.postFile(postUrl, new ProgressListener() {
@Override
public void onProgress(long currentBytes, long contentLength, boolean done) {
int progress = (int) (currentBytes * 100 / contentLength);
post_progress.setProgress(progress);
post_text.setText(progress + "%");
if (progress==100){
Toast.makeText(MainActivity.this,"上傳成功" ,Toast.LENGTH_LONG).show();
}
}
}, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
}, file);
try {
//這個是上傳圖片kkk.getNetVideoBitmap(path) 通過視頻路徑 返回bitmap kkk.YaSuoImage(bitmap) 壓縮bitmap 返回 file
HttpUtil.postFileimg("http://192.168.1.106:8080/img/and_ImgServlet", new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
},kkk.YaSuoImage(kkk.getNetVideoBitmap(path)));
}catch (Exception e){
e.printStackTrace();
}
}
}
});
}
//打開相冊
public void onclick2() {
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
seleteVedio();
}
});
}
public void seleteVedio() {
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, 66);
}
## /** * 視頻回調 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
System.out.println("---onActivityResult-->>");
if (requestCode == 66 && resultCode == RESULT_OK && null != data) {
Uri selectedVideo = data.getData();
String[] filePathColumn = {MediaStore.Video.Media.DATA};
Cursor cursor = getContentResolver().query(selectedVideo,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
path = cursor.getString(columnIndex);
System.out.println("----------->>>>"+path);
Message message=new Message();
message.arg1=1;
message.obj=path;
handler.sendMessage(message);
cursor.close();
}
if (resultCode != MainActivity.RESULT_OK) {
return;
}
}
}
上傳圖片的工具類
package wlt.com.sdk.utils;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.os.Environment;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.logging.SimpleFormatter;
/**
* 獲取視頻第一幀
*/
public class kkk {
/**
* 根據視頻地址獲取第一幀
*
* @param videoUrl
* @return
*/
public static Bitmap getNetVideoBitmap(String videoUrl) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
//根據url獲取縮略圖
retriever.setDataSource(videoUrl, new HashMap());
//獲得第一幀圖片
bitmap = retriever.getFrameAtTime();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} finally {
retriever.release();
}
return bitmap;
}
/**
* 壓縮圖片
*
* @param bitmap
* @return
*/
public static File YaSuoImage(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);//質量壓縮方法,這裏100表示不壓縮,把壓縮後的數據存放到baos中
int options = 100;
while (baos.toByteArray().length / 1024 > 500) { //循環判斷如果壓縮後圖片是否大於500kb,大於繼續壓縮
baos.reset();//重置baos即清空baos
options -= 10;//每次都減少10
bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//這裏壓縮options%,把壓縮後的數據存放到baos中
long length = baos.toByteArray().length;
}
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date(System.currentTimeMillis());
String filename = format.format(date);
File file = new File(Environment.getExternalStorageDirectory(), filename + ".png");
try {
FileOutputStream fos = new FileOutputStream(file);
try {
fos.write(baos.toByteArray());
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
recycleBitmap(bitmap);
return file;
}
public static void recycleBitmap(Bitmap... bitmaps) {
if (bitmaps == null) {
return;
}
for (Bitmap bm : bitmaps) {
if (null != bm && !bm.isRecycled()) {
bm.recycle();
}
}
}
}
okhttpUtils 工具類
package wlt.com.sdk.utils;
import android.accounts.NetworkErrorException;
import android.util.Log;
import java.io.File;
import java.util.concurrent.TimeUnit;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class HttpUtil {
private static OkHttpClient okHttpClient = new OkHttpClient.Builder().connectTimeout(10000, TimeUnit.MILLISECONDS)
.readTimeout(10000, TimeUnit.MILLISECONDS)
.writeTimeout(10000, TimeUnit.MILLISECONDS).build();
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8");
/**
* 上傳視頻
* @param url
* @param listener
* @param callback
* @param files
*/
public static void postFile(String url, final ProgressListener listener, okhttp3.Callback callback, File... files) {
MultipartBody.Builder builder = new MultipartBody.Builder();
builder.setType(MultipartBody.FORM);
Log.i("huang", "files[0].getName()==" + files[0].getName());
//第一個參數要與Servlet中的一致
builder.addFormDataPart("myfile", files[0].getName(), RequestBody.create(MediaType.parse("application/octet-stream"), files[0]));
MultipartBody multipartBody = builder.build();
Request request = new Request.Builder().url(url).post(new ProgressRequestBody(multipartBody, listener)).build();
okHttpClient.newCall(request).enqueue(callback);
}
/**
* 上傳圖片
* @param url
* @param callback
* @param files
*/
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
public static void postFileimg(String url, okhttp3.Callback callback, File... files) {
RequestBody fileBody = RequestBody.create(MEDIA_TYPE_PNG, files[0]);
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("ss",files[0].getName(),fileBody)
// .addFormDataPart("userName", userName)
.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
okHttpClient.newCall(request).enqueue(callback);
}
/**
* 下載圖片
* @param url
* @param imagePath 圖片路徑
* @return byte[]
*/
public static byte[] downloadImage(String url, String imagePath) throws Exception {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url+"/show?fileName="+imagePath)
.build();
Response response = okHttpClient.newCall(request).execute();
byte[] bytes = response.body().bytes();
return bytes;
}
}
權限 別忘加權限
以上是是android端 完成 複製代碼可用 下面是servlet
mybatils 使用的是接口方式 接口裏面的方法名是Mapper的id 返回類型也是一樣 傳的參數一樣。。。
jdbc.properties
driverClass=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
user=system
password=wltpas
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
<typeAliases>
<package name="wlt.com.vo.Student"/>
</typeAliases>
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="system"/>
<property name="password" value="wltpass"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="wlt/video/vo/VideoVo_Mapper.xml" />
<mapper resource="wlt/video/vo/VideoImg_Mapper.xml" />
</mappers>
</configuration>
VideoVo_Mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="wlt.video.vo.VideoImg_Mapper_Imp">
<insert id="Insertssutdent" parameterType="wlt.video.vo.VideoImg">
insert into videoimg (v_imgurl )values( #{v_imgurl})
</insert>
<select id="SelectAll" resultType="wlt.video.vo.VideoImg">
select * from videoimg
</select>
</mapper>
VideoImg_Mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="wlt.video.vo.VideoVo_Mapper_Imp">
<insert id="Insertssutdent" parameterType="wlt.video.vo.VideoVo">
insert into video (v_url )values( #{v_url})
</insert>
<select id="SelectAll" resultType="wlt.video.vo.VideoVo">
select * from video
</select>
</mapper>
VideoVo_Mapper_Imp
package wlt.video.vo;
import java.util.List;
public interface VideoVo_Mapper_Imp {
void Insertssutdent(VideoVo student);
List<VideoVo> SelectAll();
}
VideoImg_Mapper_Imp
package wlt.video.vo;
import java.util.List;
public interface VideoImg_Mapper_Imp {
void Insertssutdent(VideoImg student);
List<VideoImg> SelectAll();
}
接着就差vo
package wlt.video.vo;
import java.io.Serializable;
public class VideoVo implements Serializable{
private String v_url;
public String getV_url() {
return v_url;
}
public void setV_url(String vUrl) {
v_url = vUrl;
}
}
package wlt.video.vo;
import java.io.Serializable;
public class VideoImg implements Serializable{
private String v_imgurl;
public String getV_imgurl() {
return v_imgurl;
}
public void setV_imgurl(String vImgurl) {
v_imgurl = vImgurl;
}
}
MybatisUtil
package wlt.video.vo;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtil {
private static SqlSessionFactory ssf;
private static SqlSession ss;
public static SqlSession getSqlSession(){
try {
Reader in = Resources.getResourceAsReader("mybatis-config.xml");
ssf = new SqlSessionFactoryBuilder().build(in);
ss = ssf.openSession();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return ss;
}
}
以上 mybatis 完成 servlet 下面
圖片的servlet
package wlt.img.servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.ibatis.session.SqlSession;
import wlt.video.vo.VideoImg;
import wlt.video.vo.VideoImg_Mapper_Imp;
import wlt.video.vo.VideoVo_Mapper_Imp;
@SuppressWarnings("serial")
public class and_ImgServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
resp.setCharacterEncoding("utf-8");
PrintWriter out = resp.getWriter();
String url="";
SqlSession session=wlt.video.vo.MybatisUtil.getSqlSession();
VideoImg_Mapper_Imp imp= session.getMapper(VideoImg_Mapper_Imp.class);
// 爲解析類提供配置信息
DiskFileItemFactory factory = new DiskFileItemFactory();
// 創建解析類的實例
ServletFileUpload sfu = new ServletFileUpload(factory);
// 開始解析
sfu.setFileSizeMax(1024 * 1024 * 5);
// 每個表單域中數據會封裝到一個對應的FileItem對象上
try {
List<FileItem> items = sfu.parseRequest(req);
// 區分表單域
for (int i = 0; i < items.size(); i++) {
FileItem item = items.get(i);
// isFormField爲true,表示這不是文件上傳表單域
if (!item.isFormField()) {
ServletContext sctx = getServletContext();
// 獲得存放文件的物理路徑
// upload下的某個文件夾 得到當前在線的用戶 找到對應的文件夾
String path = sctx.getRealPath("/upload/images");
System.out.println(path);
// 獲得文件名
String fileName = item.getName();
url="http://192.168.1.106:8080/video/images/"+fileName;
VideoImg v=new VideoImg();
v.setV_imgurl(url);
imp.Insertssutdent(v);
session.commit();
System.out.println("添加成功");
//E:\cat\apache-tomcat-6.0.29\webapps\img\images
System.out.println(fileName);
// 該方法在某些平臺(操作系統),會返回路徑+文件名
fileName = fileName
.substring(fileName.lastIndexOf("/") + 1);
File file = new File(path + "\\" + fileName);
System.out.println("--->>" + file);
if (!file.exists()) {
item.write(file);
// 將上傳圖片的名字記錄到數據庫中
System.out.println("----------ok-----...");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
視頻的servlt
package wlt.img.servlet;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.ibatis.session.SqlSession;
import wlt.video.vo.VideoVo;
import wlt.video.vo.VideoVo_Mapper_Imp;
public class voideoServlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String url="";
SqlSession session=wlt.video.vo.MybatisUtil.getSqlSession();
VideoVo_Mapper_Imp imp= session.getMapper(VideoVo_Mapper_Imp.class);
PrintWriter out = response.getWriter();
DiskFileItemFactory factory=new DiskFileItemFactory();
String upload=this.getServletContext().getRealPath("/upload");
System.out.println("--->>:"+upload);
factory.setSizeThreshold(1024*1024*5);
ServletFileUpload fileUpload=new ServletFileUpload(factory);
try {
List<FileItem> list=fileUpload.parseRequest(request);
System.out.println("==="+list.size());
for (int i = 0; i < list.size(); i++) {
FileItem item = list.get(i);
ServletContext sctx = getServletContext();
String fileName = item.getName();
System.out.println(fileName);
url="http://192.168.1.106:8080/video/"+fileName;
System.out.println("--url->>"+url);
VideoVo videoVo=new VideoVo();
videoVo.setV_url(url);
imp.Insertssutdent(videoVo);
session.commit();
System.out.println("添加session成功");
System.out.println("--url->>");
// 該方法在某些平臺(操作系統),會返回路徑+文件名
fileName = fileName
.substring(fileName.lastIndexOf("/") + 1);
File file = new File(upload + "\\" + fileName);
System.out.println("--->>" + file.toString());
if (!file.exists()) {
try {
item.write(file);
System.out.println("----------ss-----...");
//out.print("http://192.168.1.106:8080/img/video/a.mp4");這個是給Androidstudio 返回的
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.write("no");
}
out.flush();
out.close();
}
}
# web.xml
<servlet>
<servlet-name>and_ImgServlet</servlet-name>
<servlet-class>wlt.img.servlet.and_ImgServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>and_ImgServlet</servlet-name>
<url-pattern>/and_ImgServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>voideoServlet1</servlet-name>
<servlet-class>wlt.img.servlet.voideoServlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>voideoServlet1</servlet-name>
<url-pattern>/voideoServlet1</url-pattern>
</servlet-mapping>
## 最後就是tomcat 打開 server.xml
添加 可以理解取個別名
<Context docBase="E:\cat\apache-tomcat-6.0.29\webapps\img\upload" path="/video" reloadable="true"/>
url="http://192.168.1.106:8080/video/"+fileName;
這個video==E:\cat\apache-tomcat-6.0.29\webapps\img\upload 這個路徑
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/202002231338380.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjE4MzA3,size_16,color_FFFFFF,t_70)
## 想一想 ok 能用到 你懂得