本文目錄一覽:
- 1、app怎麼上傳圖片到java後台?java後台處理的具體代碼是怎麼寫的?
- 2、android開發怎麼實現拍照上傳
- 3、求教!app怎麼上傳圖片到java後台?java後台處理的具體代碼是怎麼寫的?
- 4、用java完成圖片多張批量上傳的功能,還有就是後台的應該怎麼處理上傳的照片。
app怎麼上傳圖片到java後台?java後台處理的具體代碼是怎麼寫的?
使用一些已有的組件幫助我們實現這種上傳功能。常用的上傳組件:Apache的CommonsFileUploadJavaZoom的UploadBeanjspSmartUpload以下,以FileUpload為例講解1、在jsp端要注意enctype=”multipart/form-data”然後只需要放置一個file控件,並執行submit操作即可2、web端核心代碼如下:publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{request.setCharacterEncoding(“UTF-8”);DiskFileItemFactoryfactory=newDiskFileItemFactory();ServletFileUploadupload=newServletFileUpload(factory);try{Listitems=upload.parseRequest(request);Iteratoritr=items.iterator();while(itr.hasNext()){FileItemitem=(FileItem)itr.next();if(item.isFormField()){System.out.println(“表單參數名:”+item.getFieldName()+”,表單參數值:”+item.getString(“UTF-8”));}else{if(item.getName()!=null!item.getName().equals(“”)){System.out.println(“上傳文件的大小:”+item.getSize());System.out.println(“上傳文件的類型:”+item.getContentType());System.out.println(“上傳文件的名稱:”+item.getName());FiletempFile=newFile(item.getName());Filefile=newFile(sc.getRealPath(“/”)+savePath,tempFile.getName());item.write(file);request.setAttribute(“upload.message”,”上傳文件成功!”);}else{request.setAttribute(“upload.message”,”沒有選擇上傳文件!”);}}}}catch(FileUploadExceptione){e.printStackTrace();}catch(Exceptione){e.printStackTrace();request.setAttribute(“upload.message”,”上傳文件失敗!”);}request.getRequestDispatcher(“/uploadResult.jsp”).forward(request,response);}
android開發怎麼實現拍照上傳
最近看了幾篇關於Android照相機的一些文章,現在總結如下,直接上源代碼把,該說的都用注釋說完了
1.java代碼
package org.android.test;
import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class Android_mytestActivity extends Activity {
/** Called when the activity is first created. */
// 定義一個button打開照相機,定義一個imageview顯示照相機所拍攝的相片;
Button but,upload_image;
ImageView img;
// 獲取sd卡根目錄地址,並創建圖片父目錄文件對象和文件的對象;
String file_str = Environment.getExternalStorageDirectory().getPath();
File mars_file = new File(file_str + “/my_camera”);
File file_go = new File(file_str + “/my_camera/file.jpg”);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
but = (Button) findViewById(R.id.my_camare_button);
upload_image=(Button)findViewById(R.id.upload_image);
img = (ImageView) findViewById(R.id.my_img_view);
//拍照
but.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 驗證sd卡是否正確安裝:
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
// 先創建父目錄,如果新創建一個文件的時候,父目錄沒有存在,那麼必須先創建父目錄,再新建文件。
if (!mars_file.exists()) {
mars_file.mkdirs();
}
/*//常規情況下,我們這裡會 創建子目錄,但在這裡不用系統拍照完畢後會根據所給的圖片路徑自動去實現;
if(!file_go.exists())
{
try {
file_go.createNewFile();
} catch (IOException e) {
}}
*/
// 設置跳轉的系統拍照的activity為:MediaStore.ACTION_IMAGE_CAPTURE ;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 並設置拍照的存在方式為外部存儲和存儲的路徑;
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(file_go));
//跳轉到拍照界面;
startActivityForResult(intent, 0x1);
} else {
Toast.makeText(Android_mytestActivity.this, “請先安裝好sd卡”,
Toast.LENGTH_LONG).show();
}
}
});
//上傳
upload_image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(file_go.exists())
{
//驗證圖片存在後就實現,上傳功能,得到與服務器的輸出流…
//什麼URLconnection ,HttpURLconnectio等都可以…….
Toast.makeText(Android_mytestActivity.this, “上傳中….”,
Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(Android_mytestActivity.this, “請先拍照….”,
Toast.LENGTH_LONG).show();
}
}
});
}
//拍照結束後顯示圖片;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
// 判斷請求碼和結果碼是否正確,如果正確的話就在activity上顯示剛剛所拍照的圖片;
if (requestCode == 0x1 resultCode == this.RESULT_OK) {
/* 使用BitmapFactory.Options類防止OOM(Out Of Memory)的問題;
創建一個BitmapFactory.Options類用來處理bitmap;*/
BitmapFactory.Options myoptions=new BitmapFactory.Options();
/* 設置Options對象inJustDecodeBounds的屬性為true,用於在BitmapFactory的
decodeFile(String path, Options opt)後獲取圖片的高和寬;
而且設置了他的屬性值為true後使用BitmapFactory的decodeFile()方法無法返回一張
圖片的bitmap對象,僅僅是把圖片的高和寬信息給Options對象;
*/
myoptions.inJustDecodeBounds=true;
BitmapFactory.decodeFile(file_go.getAbsolutePath(),myoptions);
//根據在圖片的寬和高,得到圖片在不變形的情況指定大小下的縮略圖,設置寬為222;
int height=myoptions.outHeight*222/myoptions.outWidth;
myoptions.outWidth=222;
myoptions.outHeight=height;
//在重新設置玩圖片顯示的高和寬後記住要修改,Options對象inJustDecodeBounds的屬性為false;
//不然無法顯示圖片;
myoptions.inJustDecodeBounds=false;
//還沒完這裡才剛開始,要節約內存還需要幾個屬性,下面是最關鍵的一個;
myoptions.inSampleSize=myoptions.outWidth/222;
//還可以設置其他幾個屬性用於縮小內存;
myoptions.inPurgeable=true;
myoptions.inInputShareable=true;
myoptions.inPreferredConfig=Bitmap.Config.ARGB_4444;// 默認是Bitmap.Config.ARGB_8888
//成功了,下面就顯示圖片咯;
Bitmap bitmat = BitmapFactory.decodeFile(file_go.getAbsolutePath(),myoptions);
img.setImageBitmap(bitmat);
} else {
System.out.println(“不顯示圖片”);
}
super.onActivityResult(requestCode, resultCode, data);
}
}
轉載
求教!app怎麼上傳圖片到java後台?java後台處理的具體代碼是怎麼寫的?
app那邊發送圖片的二進制流。
java後台接收這個流,並保存圖片到服務器,然後把圖片路徑返回給app。
用java完成圖片多張批量上傳的功能,還有就是後台的應該怎麼處理上傳的照片。
環境準備
1. 下載並安裝Tomcat(已經有很多關於Tomcat安裝以及使用的文章,在這裡不再介紹);
2. 下載File upload的jar包commons-fileupload-1.0-beta-1.jar,並將該文件拷貝到{$TOMCAT}/common/lib目錄下(其中{$TOMCAT}為Tomcat的安裝目錄);
3. 由於Fileupload子項目同時要用到另外一個項目commons-Beanutils,所以必須下載Beanutils,並將解壓後的文件commons-beanutils.jar拷貝到{$TOMCAT}/common/lib目錄下。
開發文件上傳頁面
文件上傳的界面如圖1所示。為了增加效率我們設計了三個文件域,同時上傳三個文件。
圖1 文件上傳界面
頁面的HTML代碼如下:
html
head
title文件上傳演示/title
/head
body bgcolor=“#FFFFFF”text=“#000000” leftmargin=“0”topmargin=“40”marginwidth=“0” marginheight=“0”
center
h1文件上傳演示/h1
form name=“uploadform”method=“POST” action=“save.jsp”ENCTYPE=“multipart/form-data”
table border=“1”width=“450”cellpadding=“4” cellspacing=“2”bordercolor=“#9BD7FF”
trtd width=“100%”colspan=“2”
文件1:input name=“file1”size=“40”type=“file”
/td/tr
trtd width=“100%”colspan=“2”
文件2:input name=“file2”size=“40”type=“file”
/td/tr
trtd width=“100%”colspan=“2”
文件3:input name=“file3”size=“40”type=“file”
/td/tr
/table
br/br/
table
trtd align=“center”input name=“upload” type=“submit”value=“開始上傳”//td/tr
/table
/form
/center
/body
/html
代碼中要特別注意的是黑體處。必須保證表單的ENCTYPE屬性值為multipart/form-data,這樣瀏覽器才能正確執行上傳文件的操作。
處理上傳文件信息
由於本文主要是講述如何使用Commons-fileupload,所以為了便於修改、調試,上傳文件的保存使用一個JSP文件來進行處理。我們將瀏覽器上傳來的所有文件保存在一個指定目錄下並在頁面上顯示所有上傳文件的詳細信息。保存頁面處理結果見圖2所示。
圖2 保存頁面
下面來看看save.jsp的代碼:
%
/**
* 演示文件上傳的處理
* @author a href=“mailto:winter.lau@163.com”Winter Lau/a
* @version $Id: save.jsp,v 1.00 2003/03/01 10:10:15
*/
%
%@ page language=“java”contentType=“text/html;charset=GBK”%
%@ page import=“java.util.*”%
%@ page import=“org.apache.commons.fileupload.*”%
html
head
title保存上傳文件/title
/head
%
String msg = “”;
FileUpload fu = new FileUpload();
// 設置允許用戶上傳文件大小,單位:字節
fu.setSizeMax(10000000);
// maximum size that will be stored in memory?
// 設置最多只允許在內存中存儲的數據,單位:字節
fu.setSizeThreshold(4096);
// 設置一旦文件大小超過getSizeThreshold()的值時數據存放在硬盤的目錄
fu.setRepositoryPath(“C:\\TEMP”);
//開始讀取上傳信息
List fileItems = fu.parseRequest(request);
%
body bgcolor=“#FFFFFF”text=“#000000” leftmargin=“0”topmargin=“40”marginwidth=“0” marginheight=“0”
font size=“6”color=“blue”文件列表:/font
center
table cellpadding=0 cellspacing=1 border=1 width=“100%”
tr
td bgcolor=“#008080”文件名/td
td bgcolor=“#008080”大小/td
/tr
%
// 依次處理每個上傳的文件
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
//忽略其他不是文件域的所有表單信息
if (!item.isFormField()) {
String name = item.getName();
long size = item.getSize();
if((name==null||name.equals(“”)) size==0)
continue;
%
tr
td%=item.getName()%/td
td%=item.getSize()%/td
/tr
%
//保存上傳的文件到指定的目錄
name = name.replace(‘:’,‘_’);
name = name.replace(‘\\’,‘_’);
item.write(“F:\\”+ name);
}
}
%
/table
br/br/
a href=“upload.html”返回上傳頁面/a
/center
/body
/html
在這個文件中需要注意的是FileUpload對象的一些參數值的意義,如下面代碼所示的三個參數sizeMax、sizeThreshold、repositoryPath:
FileUpload fu = new FileUpload();
// 設置允許用戶上傳文件大小,單位:字節
fu.setSizeMax(10000000);
// maximum size that will be stored in memory?
// 設置最多只允許在內存中存儲的數據,單位:字節
fu.setSizeThreshold(4096);
// 設置一旦文件大小超過getSizeThreshold()的值時數據存放在硬盤的目錄
fu.setRepositoryPath(“C:\\TEMP”);
這3個參數的意義分別為:
SizeMax 用來設置上傳文件大小的最大值,一旦用戶上傳的文件大小超過該值時將會拋出一個FileUploadException異常,提示文件太大;
SizeThreshold 設置內存中緩衝區的大小,一旦文件的大小超過該值的時候,程序會自動將其它數據存放在repositoryPath指定的目錄下作為緩衝。合理設置該參數的值可以保證服務器穩定高效的運行;
RepositoryPath 指定緩衝區目錄。
使用注意事項
從實際應用的結果來看該模塊能夠穩定高效的工作。其中參數SizeThreshold的值至關重要,設置太大會佔用過多的內存,設置太小會頻繁使用硬盤作為緩衝以致犧牲性能。因此,設置該值時要根據用戶上傳文件大小分布情況來設定。例如大部分文件大小集中在100KB左右,則可以使用100KB作為該參數的值,當然了再大就不合適了。使用commons-fileupload來處理HTTP文件上傳的功能模塊很小,但是值得研究的東西很多。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/310076.html