java圖片上傳到圖片伺服器
/**
*文件上傳處理主程序。
*
*@returnint操作結果0文件操作成功;1request對象不存在。2沒有設定文件保存路徑或者文件保存路徑不正確;3
*沒有設定正確的enctype;4文件操作異常。
*/
publicMap<String,String>fileupload_java(HttpServletRequestrequest,Stringuploadpath){
Map<String,String>param=newHashMap<String,String>();
try{
//參數或者文件名
Stringname=null;
//參數的value
Stringvalue=null;
//讀取的流是否為文件的標志位
booleanfileFlag=false;
//要存儲的文件。
FiletmpFile=null;
//上傳的文件的名字
StringfName=null;
FileOutputStreambaos=null;
BufferedOutputStreambos=null;
intrtnPos=0;
byte[]buffs=newbyte[BUFSIZE*8];
//取得ContentType
StringcontentType=request.getContentType();
intindex=contentType.indexOf("boundary=");
Stringboundary="--"+contentType.substring(index+9);
StringendBoundary=boundary+"--";
//從request對象中取得流。
ServletInputStreamsis=request.getInputStream();
//讀取1行
while((rtnPos=sis.readLine(buffs,0,buffs.length))!=-1){
StringstrBuff=newString(buffs,0,rtnPos);
if(strBuff.startsWith(boundary)){
if(name!=null&&name.trim().length()>0){
if(fileFlag){
bos.flush();
baos.close();
bos.close();
baos=null;
bos=null;
param.put(name,tmpFile.getAbsolutePath());
}else{
StringparamValue=param.get(name);
paramValue+=","+value;
param.put(name,paramValue);
}
}
name=newString();
value=newString();
fileFlag=false;
fName=newString();
rtnPos=sis.readLine(buffs,0,buffs.length);
if(rtnPos!=-1){
strBuff=newString(buffs,0,rtnPos);
if(strBuff.toLowerCase().startsWith("content-disposition:form-data;")){
intnIndex=strBuff.toLowerCase().indexOf("name="");
intnLastIndex=strBuff.toLowerCase().indexOf(""",nIndex+6);
name=strBuff.substring(nIndex+6,nLastIndex);
}
intfIndex=strBuff.toLowerCase().indexOf("filename="");
if(fIndex!=-1){
fileFlag=true;
intfLastIndex=strBuff.toLowerCase().indexOf(""",fIndex+10);
//fName=strBuff.substring(fIndex+10,fLastIndex);
fName=newString(strBuff.substring(fIndex+10,fLastIndex).getBytes(),"gbk");
fName=FileL.getFileNameWithoutSeprater(fName);
if(fName==null||fName.trim().length()==0){
fileFlag=false;
sis.readLine(buffs,0,buffs.length);
sis.readLine(buffs,0,buffs.length);
sis.readLine(buffs,0,buffs.length);
continue;
}else{
fName=FileL.getFileNameTime(fName);
sis.readLine(buffs,0,buffs.length);
sis.readLine(buffs,0,buffs.length);
}
}
}
}elseif(strBuff.startsWith(endBoundary)){
if(name!=null&&name.trim().length()>0){
if(fileFlag){
bos.flush();
baos.close();
bos.close();
baos=null;
bos=null;
param.put(name,tmpFile.getAbsolutePath());
}else{
StringparamValue=param.get(name);
paramValue+=","+value;
param.put(name,paramValue);
}
}
}else{
if(fileFlag){
if(baos==null&&bos==null){
tmpFile=newFile(uploadpath+fName);
baos=newFileOutputStream(tmpFile);
bos=newBufferedOutputStream(baos);
}
bos.write(buffs,0,rtnPos);
baos.flush();
}else{
value=value+strBuff;
}
}
}
}catch(IOExceptione){
e.printStackTrace();
}
returnparam;
}
B. java上傳圖片到伺服器指定路徑
privateFilemyFile;//文件
;//類型
privateStringmyFileFileName;//文件名
//。。。。getXXX()setXXX()方法
//輸入流
InputStreamis=newFileInputStream(myFile);
//設定文件路徑
StringphotoPath=ServletActionContext.getServletContext()
.getRealPath("/user/photo/");
FilefilePhotoPath=newFile(photoPath);
//判斷這個路徑是否存在,如果不存在創建這個路徑
if(!filePhotoPath.isDirectory()){
filePhotoPath.mkdir();
}
Stringextension=FilenameUtils.getExtension(this
.getMyFileFileName());//後綴名比如jpg
Stringfilename=UUID.randomUUID().toString()+"."+extension;
//目標文件
Filetofile=newFile(photoPath,filename);
//輸出流
OutputStreamos=newFileOutputStream(tofile);
byte[]buffer=newbyte[1024];
intlength=0;
while((length=is.read(buffer))>0){
os.write(buffer,0,length);
}
//關閉輸入流
is.close();
//關閉輸出流
os.close();
C. java保存圖片到本地伺服器共享
1、調用第一個介面時,先將蔽局多張旦基圖片存到本地。再調用第二個介面,將圖片統模並謹一上傳到圖片伺服器上。
2、根據類別,上傳多張圖片。
D. java實現圖片上傳至伺服器並顯示,如何做希望要具體的代碼實現
很簡單。
可以手寫IO讀寫(有點麻煩)。
怕麻煩的話使用FileUpload組件 在servlet里doPost嵌入一下代碼
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html;charset=gb2312");
PrintWriter out=response.getWriter();
//設置保存上傳文件的目錄
String uploadDir =getServletContext().getRealPath("/up");
System.out.println(uploadDir);
if (uploadDir == null)
{
out.println("無法訪問存儲目錄!");
return;
}
//根據路徑創建一個文件
File fUploadDir = new File(uploadDir);
if(!fUploadDir.exists()){
if(!fUploadDir.mkdir())//如果UP目錄不存在 創建一個 不能創建輸出...
{
out.println("無法創建存儲目錄!");
return;
}
}
if (!DiskFileUpload.isMultipartContent(request))
{
out.println("只能處理multipart/form-data類型的數據!");
return ;
}
DiskFileUpload fu = new DiskFileUpload();
//最多上傳200M數據
fu.setSizeMax(1024 * 1024 * 200);
//超過1M的欄位數據採用臨時文件緩存
fu.setSizeThreshold(1024 * 1024);
//採用默認的臨時文件存儲位置
//fu.setRepositoryPath(...);
//設置上傳的普通欄位的名稱和文件欄位的文件名所採用的字元集編碼
fu.setHeaderEncoding("gb2312");
//得到所有表單欄位對象的集合
List fileItems = null;
try
{
fileItems = fu.parseRequest(request);//解析request對象中上傳的文件
}
catch (FileUploadException e)
{
out.println("解析數據時出現如下問題:");
e.printStackTrace(out);
return;
}
//處理每個表單欄位
Iterator i = fileItems.iterator();
while (i.hasNext())
{
FileItem fi = (FileItem) i.next();
if (fi.isFormField()){
String content = fi.getString("GB2312");
String fieldName = fi.getFieldName();
request.setAttribute(fieldName,content);
}else{
try
{
String pathSrc = fi.getName();
if(pathSrc.trim().equals("")){
continue;
}
int start = pathSrc.lastIndexOf('\\');
String fileName = pathSrc.substring(start + 1);
File pathDest = new File(uploadDir, fileName);
fi.write(pathDest);
String fieldName = fi.getFieldName();
request.setAttribute(fieldName, fileName);
}catch (Exception e){
out.println("存儲文件時出現如下問題:");
e.printStackTrace(out);
return;
}
finally //總是立即刪除保存表單欄位內容的臨時文件
{
fi.delete();
}
}
}
注意 JSP頁面的form要加enctype="multipart/form-data" 屬性, 提交的時候要向伺服器說明一下 此頁麵包含文件。
如果 還是麻煩,乾脆使用Struts 的上傳組件 他對FileUpload又做了封裝,使用起來更傻瓜化,很容易掌握。
-----------------------------
以上回答,如有不明白可以聯系我。
E. java通過圖片的名字上傳到伺服器的方法
提交頁面表單
<form action="up.jsp" enctype="multipart/form-data" method="post">
<input type="file" name="file">
<input type="submit" value="確定">
</form>
上傳頁面up.jsp
<%@page import="java.io.FileWriter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="java.io.*"
pageEncoding="UTF-8"%>
<%
F. java如何實現客戶端向伺服器端傳送一個圖片的代碼,詳細一點,最好能有注釋,新手求解
public class SocketTest extends Thread {
private Socket so;
private DataInputStream in;
public static void main(String[] args) {
SocketTest app = new SocketTest();
app.startup();
}
public void startup() {
try {
// 創建服務端socket對象並指定監聽埠
ServerSocket ss = new ServerSocket(9999);
System.out.println("listening...");
// 等待客戶端連接
so = ss.accept();
System.out.println("connected");
// 開始讀取數據
start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
try {
// 創建socket輸入流
in = new DataInputStream(so.getInputStream());
while (true) {
try {
// 定義接收緩沖區(64位元組)
byte[] buf = new byte[64];
// 將數據讀到接收緩沖區中,並返回實際讀到的數據長度
int len = in.read(buf, 0, 64);
// 長度為-1說明到達輸入流末尾,socket已關閉
if (len < 1) {
System.out.println("closed");
break;
}
System.out.println("(" + len + ")");
} catch (Exception e) {
// 讀數據異常
e.printStackTrace();
}
}
} catch (Exception e) {
// 監聽異常
e.printStackTrace();
}
}
}
G. java 如何只通過後台把本地的圖片上傳的伺服器上去
這里你弄錯了一個問題;x0dx0a你的程序是要傳遞圖片的二進制數據.x0dx0a而不宴老備是傳遞路徑,然後再到伺服器讀取文件數據(你的伺服器含臘有這個文件?)x0dx0a只有當你的伺服器下有這個文件了晌毀,你傳遞一個路徑,讀取是可以的.x0dx0a//---x0dx0a關於如何上傳文件, 自己google一下,很多教程