从android上传图片到服务端(struts2)解决办法
从android上传图片到服务端(struts2)
运行起来都没有报错。
服务器端出现了着两句代码:
五月 26, 2015 1:50:43 下午 com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
信息: Removing file headimg /Users/shaoqianting/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work/Catalina/localhost/Upload/upload_69e0c98a_14d8eb8a784__7fff_00000014.tmp
我发现,它没有执行到UploadAction的excute方法,不知道改怎么写链接。
客户端
服务端代码
struts配置文件
------解决思路----------------------
楼主在浏览器输入那个链接有用吗?
运行起来都没有报错。
服务器端出现了着两句代码:
五月 26, 2015 1:50:43 下午 com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
信息: Removing file headimg /Users/shaoqianting/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work/Catalina/localhost/Upload/upload_69e0c98a_14d8eb8a784__7fff_00000014.tmp
我发现,它没有执行到UploadAction的excute方法,不知道改怎么写链接。
客户端
package com.byl.clipheadphoto;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import com.byl.asyntask.FormFile;
import com.byl.asyntask.SocketHttpRequester;
import com.byl.clipheadphoto.clip.ClipImageLayout;
import com.byl.clipheadphoto.util.ImageTools;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class ClipActivity extends Activity{
private ClipImageLayout mClipImageLayout;
private String path;
private ProgressDialog loadingDialog;
//从相册中获取数据
@Override
protected void onCreate(Bundle savedInstanceState){
requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clipimage);
//这步必须要加
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
loadingDialog=new ProgressDialog(this);
loadingDialog.setTitle("请稍后...");
path=getIntent().getStringExtra("path");
if(TextUtils.isEmpty(path)||!(new File(path).exists())){
Toast.makeText(this, "图片加载失败",Toast.LENGTH_SHORT).show();
return;
}
Bitmap bitmap=ImageTools.convertToBitmap(path, 600,600);
if(bitmap==null){
Toast.makeText(this, "图片加载失败",Toast.LENGTH_SHORT).show();
return;
}
mClipImageLayout = (ClipImageLayout) findViewById(R.id.id_clipImageLayout);
mClipImageLayout.setBitmap(bitmap);
((Button)findViewById(R.id.id_action_clip)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
loadingDialog.show();
new Thread(new Runnable() {
@Override
public void run() {
Bitmap bitmap = mClipImageLayout.clip();
long nametime=System.currentTimeMillis();
String path= Environment.getExternalStorageDirectory()+"/ClipHeadPhoto/cache/"+nametime+ ".jpeg";
ImageTools.savePhotoToSDCard(bitmap,path);
Log.d("sqt", "path:"+path);
File headimgFile=new File(Environment.getExternalStorageDirectory(),"/ClipHeadPhoto/cache/"+nametime+ ".jpeg");
Log.d("sqt", "headimgFile:"+headimgFile);
uploadFile(headimgFile);
loadingDialog.dismiss();
Intent intent = new Intent();
intent.putExtra("path",path);
Log.d("sqt", "path"+path);
setResult(RESULT_OK, intent);
finish();
}
}).start();
}
});
}
public String uploadFile(File imageFile) {
Log.i("uploadFile", "upload start");
try {
// String requestUrl = "http://192.168.1.128:8080/Struts2_Upload/upload/upload.do";
String requestUrl = "http://192.168.0.100:8080/Upload/upload/upload.do";
// 请求普通信息
Map<String, String> params = new HashMap<String, String>();
// params.put("filename", "张三");
params.put("name", "张三");
params.put("fileName", imageFile.getName());
// 上传文件
FormFile formfile = new FormFile(imageFile.getName(), imageFile,
"headimg", "application/octet-stream");
Log.i("uploadFile", "FormFile:"+params);
SocketHttpRequester.post(requestUrl, params, formfile);
} catch (Exception e) {
Log.i("SQT", "upload error");
e.printStackTrace();
}
Log.i("SQT", "upload end");
return "OK";
}
}
服务端代码
package net.sqt.action;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private File photo;// 上传文件
private String photoFileName;// 上传文件的文件名
private String photoContentType;// 上传文件的类型
private String savePath;//上传后的保存目录
public File getPhoto() {
return photo;
}
public void setPhoto(File photo) {
this.photo = photo;
}
public String getPhotoFileName() {
return photoFileName;
}
public void setPhotoFileName(String photoFileName) {
this.photoFileName = photoFileName;
}
public String getPhotoContentType() {
return photoContentType;
}
public void setPhotoContentType(String photoContentType) {
this.photoContentType = photoContentType;
}
public String getSavePath() {
return savePath;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public UploadAction() {
System.out.println("UploadAction构造方式被执行");
}
//执行上传功能
public String execute() {
System.out.println("执行上传execute()...");
HttpServletRequest request=ServletActionContext.getRequest();
//1.获取上传后文件的真实目录
String path =ServletActionContext.getServletContext().getRealPath(this.getSavePath());
System.out.println(path);
//2.获得上传文件的真实路径
String f_name=path+File.separator+this.getPhotoFileName();
//File.separator+
System.out.println(f_name);
System.out.println("文件名:"+request.getParameter("fileName"));
System.out.println("获取Android端传过来的文件信息:");
System.out.println("文件存放目录: "+getSavePath());
System.out.println("文件名称: "+photoFileName);
System.out.println("文件大小: "+photo.length());
System.out.println("文件类型: "+photoContentType);
//3.创建输入和输出流
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
try {
bis=new BufferedInputStream(new FileInputStream(photo));
bos=new BufferedOutputStream(new FileOutputStream(new File(f_name)));
byte[] buff=new byte[(int)photo.length()];
int len=0;
while ((len=bis.read(buff))!=-1) {
bos.write(buff,0,len);
}
} catch (Exception ex) {
// TODO: handle exception
ex.printStackTrace();
}
finally
{
try {
if (bis!=null) {//先close,再null
bis.close();
bis=null;
}
if (bos!=null) {
bos.close();
bos=null;
}
System.out.println("上传成功!");
} catch (Exception ex) {
// TODO: handle exception
ex.printStackTrace();
System.out.println("上传失败!");
}
}
return SUCCESS;
}
}
struts配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<constant name="struts.i18n.encoding" value="UTF-8"/>
<constant name="struts.multipart.maxSize" value="5120000"/>
<!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
<constant name="struts.devMode" value="true"/>
<package name="upload" extends="struts-default">
<action name="upload" method="execute" class="net.sqt.action.UploadAction">
<param name="savePath">/headimg</param>
<result name="success">/UploadSuccess.jsp</result>
<result name="input">/upload.jsp</result>
<!-- 拦截器堆栈的修改 -->
<interceptor-ref name="defaultStack">
<!-- 最大上传的字节 -->
<param name="fileUpload.maximumSize">
5120000
</param>
<param name="fileUpload.allowedTypes">
image/png,
image/jpeg,
application/msword
</param>
</interceptor-ref>
</action>
</struts>
------解决思路----------------------
楼主在浏览器输入那个链接有用吗?