① java中,上傳視頻時,視頻信息已經寫到資料庫了,但是指定位置卻沒有保存視頻怎麼辦
我都用struts帶的commons-fileUpload組件.smartUpload沒用過,但是我想你這句upfile.saveAs(upFilePath,File.SAVEAS_PHYSICAL);應該有返回值吧。如果接受到文件信息並寫入硬碟返回true什麼的。最後再判斷這個返回值,真寫入了文件後再把信息寫入資料庫。你寫入資料庫代碼直接放在上傳文件代碼後面,不管你文件傳成功沒有都把視頻信息寫入資料庫,這樣的結構本身就是不合理的。
② java 如何上傳大文件 如 工具或是視頻文件
要是實在你看不懂,我寫了最簡單的文件操作,是在本地之間復制文件。
思路是一樣的,只不過文件路徑變成網路路徑,裡面還有寫文件和目錄操作。
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*" %>
③ java web 項目如何實現視頻上傳然後播放功能
搞清楚兩個問題:上傳到自己的伺服器還是第三方平台?播放器實用Flash還是H5播放器?
如果是上傳到自己的伺服器,使用H5播放。那上傳視頻就和普通的文件上傳一樣。都是通過Http上傳。前端可以使用form表單上傳也可以使用ajax非同步上傳。後台可以使用apache的Common-fileUpload工具來解析並保存文件。然後生成一個訪問路徑。將訪問路徑返回給前端的 video標簽的src屬性即可。通過幾個簡單的屬性或腳本就能控制播放。
如果是上傳到第三方平台,例如騰訊視頻、愛奇藝、優酷等。他們都有開發者平台或者開放平台。一般都有一些jar工具類或者模板案例提供給你的。你上傳之後,也有返迴路徑給你。這是一般都是嵌入它們的Flash插件。所以你只需要將那段Flash插件的HTML代碼放入你的網頁中就可以播放了。好處是,不需要自己存儲。不需要准備播放器。壞處是,可能有廣告。不是可能。是一定會有。
④ java怎麼實現視頻上傳
方法/步驟
1
首先這里jsp頁面的代碼 定義布局文件html的 如圖所示
⑤ java 項目開發 實現上傳視頻。
上傳視頻?只是上傳的話,相當於,上傳文件了
html如下
<form action="MultipartTestServlet" enctype="multipart/form-data" method="post">
<input type="text" name="username" /><br />
<input type="file" name="myfile" /><br/>
<input type="submit" />
</form>
java如下
MultipartTestServlet.java
package com.bug.servlet;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
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.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;
public class MultipartTestServlet extends HttpServlet {
public MultipartTestServlet() {
super();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("gbk");
RequestContext requestContext = new ServletRequestContext(request);
if(FileUpload.isMultipartContent(requestContext)){
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File("c:/tmp/"));
ServletFileUpload upload = new ServletFileUpload(factory);
//upload.setHeaderEncoding("gbk");
upload.setSizeMax(2000000);
List items = new ArrayList();
try {
items = upload.parseRequest(request);
} catch (FileUploadException e1) {
System.out.println("文件上傳發生錯誤" + e1.getMessage());
}
Iterator it = items.iterator();
while(it.hasNext()){
FileItem fileItem = (FileItem) it.next();
if(fileItem.isFormField()){
System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk"));
}else{
System.out.println(fileItem.getFieldName() + " " +
fileItem.getName() + " " +
fileItem.isInMemory() + " " +
fileItem.getContentType() + " " +
fileItem.getSize());
if(fileItem.getName()!=null && fileItem.getSize()!=0){
File fullFile = new File(fileItem.getName());
File newFile = new File("c:/temp/" + fullFile.getName());
try {
fileItem.write(newFile);
} catch (Exception e) {
e.printStackTrace();
}
}else{
System.out.println("文件沒有選擇 或 文件內容為空");
}
}
}
}
}
}
web.xml中加入
<servlet>
<servlet-name>MultipartTestServlet</servlet-name>
<servlet-class>com.bug.servlet.MultipartTestServlet</servlet-class>
</servlet>
需要的包到這三個地方下載
http://jakarta.apache.org/commons/fileupload/下載
http://jakarta.apache.org/commons/io/下載
在http://www.servlets.com/cos/下載
關於視頻的播放,你只能自己再去找了
⑥ java/web 如何編寫視頻上傳的代碼
t
修改Web.xml文件
設置每15分鍾運行的Servlet
<servlet servlet-name='alarm' servlet-class='test.TestAlarm'>
<run-at>:00, :15, :30, :45</run-at>
</servlet>
設置每天16:30和20:00運行的Servlet
<servlet servlet-name='alarm' servlet-class='test.TestAlarm'>
<run-at>16:30,20:00</run-at>
</servlet>
容器只為每個servlet創建一個實例,這意味著servlet必須是線程安全的,即,能夠同時
處理多個請求,每個處理都通過servlet代碼作為單獨的線程來處理。
將servlet作為所有應用程序請求的公共入口點時,可以獲得對應用程序頁面流的整體控制。
當使用servlet作為控制器時,必須處理下列基本要求:
所有請求處理都必須傳遞到單獨的控制器servlet中。
servlet必須能夠區分請求,以便進行不同類型的處理。
可以使用現成的struts servlet。
struts servlet根據請求URI中的一部分來斷定請求的類型,查找對應的行為類(使用配製信息),並調用execute()方法。
execute()方法不顯示應答,只關心商務邏輯。該方法返回一個strutsActionForward實例,其中包含應答應該調用以顯示應答的JSP頁面的相關信息。該頁面由邏輯名稱進行標示,並影射到配置文件中的實際頁面邏輯上。因此可以通過重新配置,而不是改變代碼,從而至少在某種程度上控制頁面流。
使用servlet的最佳解決方案是定義servlet的映射規則:
而不是使用:/myapp/servlet開頭的調用,或是使用
<form action=」/ora/servlet/controller/someAction」>
以上方式的調用servlet將會導致安全問題和程序部署的問題。
servlet的service()方法與doGet()、doPost()方法區別:
public void service(request,response) {
if request.getMethod().equals("POST") {
doPost(request,response);
}else if request.getMethod().equals("GET") {
doGet(request,response);
}
}
有用戶請求,對應有get/post才會調用doGet()/doPost(),service()有無請求都執行或用在定時執行。
Servlet是用Java編寫的Server端程序,它與協議和平台無關。Servlet運行於Java-enabled Web Server中。Java Servlet可以動態地擴展Server的能力,並採用請求-響應模式提供Web服務。
最早支持Servlet技術的是JavaSoft的Java Web Server。此後,一些其它的基於Java的Web Server開始支持標準的Servlet API。
一、Servlet的特點
Servlet是Java技術對CGI編程的回答。Servlet程序在伺服器端運行,動態地生成Web頁面。與傳統的CGI和許多其他類似CGI的技術相比,Java Servlet具有更高的效率,更容易使用,功能更強大,具有更好的可移植性,更節省投資(更重要的是, Servlet程序員收入要比Perl程序員高:-)
高效
在傳統的CGI中,每個請求都要啟動一個新的進程,如果CGI程序本身的執行時間較短,啟動進程所需要的開銷很可能反而超過實際執行時間。而在Servlet中,每個請求由一個輕量級的Java線程處理(而不是重量級的操作系統進 程)。在傳統CGI中,如果有N個並發的對同一CGI程序的請求,則該CGI程序的代碼在內存中重復裝載了N次;而對於Servlet,處理請求的是N個 線程,只需要一份Servlet類代碼。在性能優化方面,Servlet也比CGI有著更多的選擇,比如緩沖以前的計算結果,保持資料庫連接的活動,等等。
方便
Servlet提供了大量的實用工具常式,例如自動地解析和解碼HTML表單數據、讀取和設置HTTP頭、處理Cookie、跟蹤會話狀態等。
功能強大
在Servlet中,許多使用傳統CGI程序很難完成的任務都可以輕松地完成。例如,Servlet能夠直接和Web伺服器交互,而普通的CGI程序不能。Servlet還能夠在各個程序之間共享數據,使得資料庫連接池之類的功能很容易實現。
可移植性好
Servlet用Java編寫,Servlet API具有完善的標准。因此,為I-Planet Enterprise Server寫的Servlet無需任何實質上的改動即可移植到Apache、Microsoft IIS或者WebStar。幾乎所有的主流伺服器都直接或通過插件支持Servlet。
節省投資
不僅有許多廉價甚至免費的Web伺服器可供個人或小規模網站使用,而且對於現有的伺服器,如果它不支持Servlet的話,要加上這部分功能也往往是免費的(或只需要極少的投資)。
二、Servlet的主要功能
Servlet的主要功能在於互動式地瀏覽和修改數據,生成動態Web內容。這個過程為:
客戶端發送請求至伺服器端;
伺服器將請求信息發送至Servlet
Servlet生成響應內容並將其傳給Server。響應內容動態生成,通常取決於客戶端的請求
伺服器將響應返回給客戶端
Servlet看起來像是通常的Java程序。Servlet導入特定的屬於Java Servlet API的包。因為是對象位元組碼,可動態地從網路載入,可以說Servlet對Server就如同Applet對Client一樣,但是,由於Servlet運行於Server中,它們並不需要一個圖形用戶界面。從這個角度講,Servlet也被稱為Faceless Object。
三、JAVA Servlet的優勢
Servlet可以和其他資源(文件、資料庫、Applet、Java應用程序等)交互,以生成返回給客戶端的響應內容。如果需要,還可以保存請求-響應過程中的信息。
採用Servlet,伺服器可以完全授權對本地資源的訪問(如資料庫),並且Servlet自身將會控制外部用戶的訪問數量及訪問性質
Servlet可以是其它服務的客戶端程序,例如,它們可以用於分布式的應用系統中,可以從本地硬碟,或者通過網路從遠端硬碟激活Servlet。
Servlet可被鏈接(chain)。一個Servlet可以調用另一個或一系列Servlet,即成為它的客戶端。
採用Servlet Tag技術,可以在HTML頁面中動態調用Servlet。
Servlet API與協議無關。它並不對傳遞它的協議有任何假設。
像所有的Java程序一樣,Servlet擁有面向對象Java語言的所有優勢
Servlet提供了Java應用程序的所有優勢——可移植、穩健、易開發。使用Servlet 的Tag技術,Servlet能夠生成嵌於靜態HTML頁面中的動態內容。
一個Servlet被客戶端發送的第一個請求激活,然後它將繼續運行於後台,等待以後的請求。每個請求將生成一個新的線程,而不是一個完整的進程。多個客戶能夠在同一個進程中同時得到服務。一般來說,Servlet進程只是在Web Server卸載時被卸載。
四、Servlet生命周期
裝載Servlet。這項操作一般是動態執行的。然而,Server通常會提供一個管理的選項,用於在Server啟動時強制裝載和初始化特定的Servlet。
Server創建一個Servlet的實例
Server調用Servlet的init()方法
一個客戶端的請求到達Server
Server創建一個請求對象
Server創建一個響應對象
Server激活Servlet的service()方法,傳遞請求和響應對象作為參數
service()方法獲得關於請求對象的信息,處理請求,訪問其他資源,獲得需要的信息
service()方法使用響應對象的方法,將響應傳回Server,最終到達客戶端。service()方法可能激活其它方法以處理請求,如doGet()或doPost()或程序員自己開發的新的方法
對於更多的客戶端請求,Server創建新的請求和響應對象,仍然激活此Servlet的 service()方法,將這兩個對象作為參數傳遞給它。如此重復以上的循環,但無需再次調用init()方法。一般Servlet只初始化一次 ,當Server不再需要Servlet時(一般當Server關閉時),Server調用Servlet的Destroy()方法。
在美國,EJB+Servlet+JSP幾乎成為電子商務的開發標准。本來 ASP 也很有希望,但微軟最近可能把精力都集中在打官司和Win2000上, 因此電子商務發展得太少。PHP由於其模式和一些天生缺陷,毫無希望。 在美國,很少有商業站點用PHP的
⑦ 怎樣使用javaweb實現上傳視頻和下載功能
文件上傳就是將客戶端資源,通過網路傳遞到伺服器端。
因為文件數據比較大,必須通過文件上傳才可以完成將數據保存到資料庫端的操作。
文件上傳的本質就是IO流操作。
演示:文件上傳應該如何操作?
瀏覽器端:
1.method=post 只有post才可以攜帶大數據
2.必須使用<input type='file' name='f'>要有name屬性
3.encType="multipart/form-data"
伺服器端:
request對象是用於獲取請求信息。
它有一個方法 getInputStream(); 可以獲取一個位元組輸入流,通過這個流,可以讀取到
所有的請求正文信息.
文件上傳原理:
瀏覽器端注意上述三件事,在伺服器端通過流將數據讀取到,在對數據進行解析.
將上傳文件內容得到,保存在伺服器端,就完成了文件上傳。
注意:在實際開發中,不需要我們進行數據解析,完成文件上傳。因為我們會使用文件上傳的工具,它們已經封裝好的,提供API,只要調用它們的API就可以完成文件上傳操作.我們使用的commons-fileupload,它是apache提供的一套開源免費的文件上傳工具。
代碼演示文件上傳的原理:
在WebRoot下新建upload1.jsp
[html]view plain
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>MyJSP'index.jsp'startingpage</title>
</head>
<body>
<!--encType默認是application/x-www-form-urlencoded-->
<formaction="${pageContext.request.contextPath}/upload1"
method="POST"enctype="multipart/form-data">
<inputtype="text"name="content"><br>
<inputtype="file"name="f"><br><inputtype="submit"
value="上傳">
</form>
</body>
</html>
新建Upload1Servlet 路徑:/upload1
[java]view plain
packagecn.itcast.web.servlet;
importjava.io.IOException;
importjava.io.InputStream;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//System.out.println("upload1servlet......");
//通過request獲取一個位元組輸入流,將所有的請求正文信息讀取到,列印到控制台
InputStreamis=request.getInputStream();
byte[]b=newbyte[1024];
intlen=-1;
while((len=is.read(b))!=-1){
System.out.println(newString(b,0,len));
}
is.close();
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doGet(request,response);
}
}
在瀏覽器端訪問信息如下:
文件上傳概述
實現web開發中的文件上傳功能,需要完成如下二步操作:
在web頁面中添加上傳輸入項。
在Servlet中讀取上傳文件的數據,並保存在伺服器硬碟中。
如何在web頁面中添加上傳輸入項?
<input type="file">標簽用於在web頁面中添加文件上傳輸入項,設置文件上傳輸入項時注意:
1、必須設置input輸入項的name屬性,否則瀏覽器將不會發送上傳文件的數據。
2、必須把form的encType屬性設為multipart/form-data 設置該值後,瀏覽器在上傳文件時,並把文件數據附帶在http請求消息體內,並使用MIME協議對上傳的文件進行描述,以方便接收方對上傳數據進行解析和處理。
3、表單的提交方式要設置為post。
如何在Servlet中讀取文件上傳數據,並保存到本地硬碟中?
Request對象提供了一個getInputStream方法,通過這個方法可以讀取到客戶端提交過來的數據。但由於用戶可能會同時上傳多個文件,在servlet端編程直接讀取上傳數據,並分別解析出相應的文件數據是一項非常麻煩的工作,示例。
為方便用戶處理文件上傳數據,Apache 開源組織提供了一個用來處理表單文件上傳的一個開源組件( Commons-fileupload ),該組件性能優異,並且其API使用極其簡單,可以讓開發人員輕松實現web文件上傳功能,因此在web開發中實現文件上傳功能,通常使用Commons-fileupload組件實現。
使用Commons-fileupload組件實現文件上傳,需要導入該組件相應支撐jar包:Commons-fileupload和commons-io。commo-io不屬於文件上傳組件的開發jar文件,但Commons-fileupload組件從1.1版本開始,它工作時需要commons-io包的支持。
⑧ 用java怎麼實現從前端接收、處理並傳回視頻
1、接收前端上傳的文件
/**
* 接收多文件
*/
@RequestMapping("/upload")
public R uploadFile(@RequestParam Map<String, Object> params, HttpServletRequest request) {
// 復雜類型的request對象
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
// 獲取文件名集合放入迭代器
Iterator<String> files = mRequest.getFileNames();
while (files.hasNext()) {
// 獲取上傳文件的對象
MultipartFile mFile = mRequest.getFile(files.next());
if (mFile != null) {
//原始文件名稱
String oldfile = mFile.getOriginalFilename();
//文件後綴
String suffix = oldfile.substring(oldfile.indexOf('.'), oldfile.length());
String suffix2 = oldfile.substring(oldfile.indexOf('.')+1, oldfile.length());
/***************文件處理*********************/
}
}
}
2.接收前端上傳的文件
/**
* 接收附件
* @param request
* @return
*/
@ResponseBody
@RequestMapping(value="fileupload",method=RequestMethod.POST)
public void springUpload(HttpServletRequest request) {
//將當前上下文初始化給 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
request.getSession().getServletContext());
//檢查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request)) {
//將request變成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
//獲取multiRequest 中所有的文件名
Iterator iter=multiRequest.getFileNames();
while(iter.hasNext()){
//一次遍歷所有文件
MultipartFile file=multiRequest.getFile(iter.next().toString());
//最初上傳文件名的文件名
String oldFilename = file.getOriginalFilename();
//獲取初始文件名後綴
String fileSuffix = oldFilename.substring(oldFilename.lastIndexOf(".") +1);
/***************文件處理*********************/
}
}
3.接收前端上傳的文件
/**
* 接收文件
*
*
* @param model
* @return
* @throws IOException
* @throws IllegalStateException
*/
@RequestMapping(value = "imageupload")
public void imageUpload(MultipartFile file) throws IllegalStateException, IOException {
//文件名稱
String realFileName = file.getOriginalFilename();
//文件後綴
String suffix = realFileName.substring(realFileName.lastIndexOf(".") + 1);
/***************文件處理*********************/
}
⑨ java視頻文件上傳,截取圖未保存成功,求解!!!
使用ffmpeg,下載ffmpeg相關組件到電腦中,然後用java調用命令的方式(RunTime.exec相關方法),使用ffmpeg的功能。
⑩ java上傳視頻除了檢查後綴,怎麼判斷文件格式,前8位來判斷.flv格式有的00000018有的464C5601可靠么求解
利用js就可以判斷上傳文件的後綴名,而且谷歌火狐ie都可以,可以判斷大小和後綴,從網上找找,找不到我給你