100分。struts2实现的图片上传 例子???

struts2实现的图片上传(带文件类型和大小大小验证的).生成缩略图。。最还还有进度条显示。要在linux运行环境,能够实现此功能邮箱:121261494@qq.com... struts2实现的图片上传 (带文件类型和大小大小验证的).生成缩略图。。最还还有进度条显示。

要在linux运行环境,能够实现此功能
邮箱:121261494@qq.com
展开
 我来答
729394192
2011-12-24 · TA获得超过874个赞
知道答主
回答量:25
采纳率:0%
帮助的人:15.2万
展开全部
/**** 以下代码只作参考,不能独立运行。因为关联到其它,代码不能一一贴出,敬请谅解。****/
// 对于文件类型、大小验证、生成缩略图和进度条都有实现。
// 上传插件使用了:uploadify(实现了文件类型、大小验证和进度条的功能)
// 生成缩略图使用了:ImageMagick(linux环境请下载linux版本的ImageMagick)

// 后台处理程序
public class GoodsImgUpload extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//通过URL访问时到404页面去
response.sendRedirect(request.getContextPath() + "/404.html");
}

@SuppressWarnings("unchecked")
public synchronized void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String savePath = this.getServletConfig().getServletContext()
.getRealPath("");

savePath += "/uploadfile/";
//创建uploadfile文件夹
FilesUtil.mkdirs(savePath);
savePath += "goods/";
FilesUtil.mkdirs(savePath);
savePath += "big/";
FilesUtil.mkdirs(savePath);
//创建年、月文件夹
savePath = FilesUtil.mkdirYearAndMonth(savePath);

DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setHeaderEncoding("utf-8");

List fileList = null;
try {
fileList = upload.parseRequest(request);

} catch (FileUploadException e) {

e.printStackTrace();
return;
}
Iterator<FileItem> it = fileList.iterator();

String oldName = "";
String newName = "";
String extName = "";

while (it.hasNext()) {

FileItem item = it.next();

if (!item.isFormField()) {

oldName = item.getName();
// long size = item.getSize();
// String type = item.getContentType();

if (oldName == null || oldName.trim().equals("")) {
continue;
}
// 扩展名格式:
if (oldName.lastIndexOf(".") >= 0) {

extName = oldName.substring(oldName.lastIndexOf("."));
}
File file = null;

do {
// 生成文件名:
newName = UUID.randomUUID().toString();
file = new File(savePath + newName + extName);

} while (file.exists());

File saveFile = new File(savePath + newName + extName);

try {
item.write(saveFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}

String sortValue = oldName.substring(0, oldName.lastIndexOf(".")); //图片排序
sortValue = sortValue.indexOf("-") == -1 ? sortValue : sortValue.substring(1);

//图片命名包含非数字字符
try {
if (sortValue.lastIndexOf("-") != -1) {
int index = sortValue.lastIndexOf("-") + 1;
sortValue = sortValue.substring(index);
}
int sv = Integer.parseInt(sortValue);
sortValue = String.valueOf(sv);
} catch (Exception e) {
if (request.getSession().getAttribute("sortIndex") == null) {
request.getSession().setAttribute("sortIndex", 1);
} else {
int sortIndex = (Integer)request.getSession().getAttribute("sortIndex");
request.getSession().setAttribute("sortIndex", ++sortIndex);
}
sortValue = request.getSession().getAttribute("sortIndex").toString();
}

Map<String, String> upImg = new HashMap<String, String>();

String bigUrl = savePath.substring(savePath.indexOf("/uploadfile")) + newName + extName;
String big = "{\"sort\":\""+ sortValue +"\",\"url\":\""+ bigUrl +"\"}";
upImg.put("big", big);

//需要压缩的图片路径
String oldImgPath = savePath + newName + extName;
//压缩后的新图片存放路径
String newImgPath = "";
newImgPath = this.getServletConfig().getServletContext().getRealPath("")
+ "/uploadfile/goods/small/";
//创建small文件夹+
FilesUtil.mkdirs(newImgPath);
newImgPath = FilesUtil.mkdirYearAndMonth(newImgPath);
newImgPath += newName + extName;

//压缩预览图
ImageUtil.compress(oldImgPath, newImgPath, Constants.IMG_SMALL_SIZE, Constants.IMG_SMALL_SIZE);
String smallUrl = newImgPath.substring(savePath.indexOf("/uploadfile"));
String small = "{\"sort\":\""+ sortValue +"\",\"url\":\""+ smallUrl +"\"}";
upImg.put("small", small);

newImgPath = this.getServletConfig().getServletContext().getRealPath("")
+ "/uploadfile/goods/thumbnail/";
FilesUtil.mkdirs(newImgPath);
newImgPath = FilesUtil.mkdirYearAndMonth(newImgPath);
newImgPath += newName + extName;

//压缩缩略图
ImageUtil.compress(oldImgPath, newImgPath, Constants.IMG_THUMBNAIL_SIZE, Constants.IMG_THUMBNAIL_SIZE);
String thumbnailUrl = newImgPath.substring(savePath.indexOf("/uploadfile"));
String thumbnail = "{\"sort\":\""+ sortValue +"\",\"url\":\""+ thumbnailUrl +"\"}";
upImg.put("thumbnail", thumbnail);

response.getWriter().print(JSONObject.fromObject(upImg));
}
}

// 页面js代码
function initUpload(){
var sizeLimit = 655360; //上传文件最大限制:500kb(512000),640(655360)
$("#uploadify").uploadify({
'uploader' : '<c:url value="/upload/uploadify.swf" />',
'script' : '<c:url value="/goodsImgUpload.html" />',
'cancelImg' : '<c:url value="/images/uploadify-cancel.png" />',
'queueID' : 'fileQueue', <%--与下面的id对应 --%>
'fileDesc' : 'jpg、gif、png、bmp文件', <%--可上传的文件格式说明 --%>
'fileExt' : '*.jpg;*.gif;*.png;*.bmp;', <%--控制可上传文件的扩展名,启用本项时需同时声明fileDesc --%>
'sizeLimit' : sizeLimit, <%--上传文件大小 --%>
'auto' : true, <%--是否自动上传 --%>
'multi' : true, <%--是否可以上传多个文件 --%>
'height' : 23,
'width' : 73,
'buttonImg' : '${pageContext.request.contextPath}/images/main/browse.gif',
'onComplete' : function(event, queueID, fileObj, response, data) {
var resObj = eval("(" + response + ")");
var big = eval("(" + resObj["big"] + ")");
var small = eval("(" + resObj["small"] + ")");
var thumbnail = eval("(" + resObj["thumbnail"] + ")");

if(upBigImgStr != "") {
upBigImgStr += ",";
}
if(upSmallImgStr != "") {
upSmallImgStr += ",";
}
if(upThumbnailImgStr != "") {
upThumbnailImgStr += ",";
}
upBigImgStr += resObj["big"];
upSmallImgStr += resObj["small"];
upThumbnailImgStr += resObj["thumbnail"];

var thumbnailUrl = thumbnail["url"];
var smallUrl = small["url"];
// 刚才上传图片的排序号
var thisSort = parseInt(thumbnail["sort"]);
var index = $('#ul1 li').length + 1;
var liHtml = "<li id='li"+ index +"' sort='"+ thisSort +"'>"+
"<div style='background-color: #ccc;'>"+
"<div style='float: left;'><input type='text' id='imgSort' value='"+ thisSort +"' title='图片排序,数字越小越靠前显示' style='width: 15px; height: 10px; font-size: 10px;' onchange='changeSort(null, \""+ thumbnailUrl +"\", "+ thisSort +", \"li"+ index +"\", "+ true +")' /></div>"+
"<div style='text-align: right;'><span title='删除' style='cursor: pointer;' onclick='delImg(\"li"+ index +"\")'>×</span></div>"+
"</div>"+
"<div style='clear: left;' onmouseover='changeImg(this, \""+ thumbnailUrl +"\")'><img id='thumbnailImg' src='${pageContext.request.contextPath}"+ thumbnailUrl +"' url='"+ thumbnailUrl + "' width='32' height='30' /></div>"+
"</li>";
$('#ul1').append(liHtml);
imgSort();
// 显示预览图
$('#smallImg').attr({"src" : "${pageContext.request.contextPath}" + smallUrl});
selectThumbImg("li" + index);
},
'onAllComplete' : function() {
<%request.getSession().removeAttribute("sortIndex");%>
},
'onError' : function(event, queueID, fileObj, errorObj) {
if (fileObj.size > sizeLimit) {
alert('文件"'+ fileObj.name +'"上传失败\n错误信息:已超出最大上传限制('+ sizeLimit/1024 +'kb)');
} else {
alert('文件"' + fileObj.name + '" 上传失败\n错误类型:'+ errorObj.type +'\n错误信息:'+ errorObj.info);
}
}
});
}
追问
是用struts2上传的。。。该怎样写??
追答
也就是后台程序doPost()里的代码,页面代码不变。不过用struts2时会出现一个问题:
List fileList = null;
try {
fileList = upload.parseRequest(request); // 这里获取不到
} catch (FileUploadException e) {
e.printStackTrace();
return;
}
网上暂未找到好的struts2解决方案,用servlet吧
qqqqanje
2011-12-26 · TA获得超过262个赞
知道小有建树答主
回答量:151
采纳率:100%
帮助的人:77.4万
展开全部
这个就是struts2的,我艹
-------------已在linux服务上线---------------------
private File userfile;
private String userfileContentType;
private String userfileFileName;
//get set 略
public void uploadImg() throws Exception {
Person person = factory.getUserServiceImpl().getCurrentPerson();//得到当前用户
HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request = ServletActionContext.getRequest();
Calendar cal = Calendar.getInstance();
int yy = cal.get(Calendar.YEAR);
String savePath = request.getSession().getServletContext().getRealPath("/")+"/upload/images/"+yy+"/";
String filePath = savePath ;
File dir = new File(filePath);
if (!dir.exists()) {
dir.mkdirs();
}
String fileName = userfileFileName;
String basePath = "upload/images/"+yy+"/";
String uuid = UUID.randomUUID().toString();
String fileType=fileName.substring(fileName.length()-3);
File uploadedFile = new File(filePath + uuid+"."+fileType);
//userfile.write(uploadedFile);
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(userfile), 1024*1024*10);
out = new BufferedOutputStream(new FileOutputStream(uploadedFile),
1024*1024*10);
byte[] buffer = new byte[1024*1024*10];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

response.setContentType("text/html;charaset=utf-8");
response.getWriter().write("{success:'true',fileURL:'"+basePath + uuid+"."+fileType + "'}");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bd9006
2011-12-17 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
随手搜的,请别见外
不保证进度条、不保证LINUX、不保证缩略图、……
http://www.360doc.com/content/10/0821/10/2562177_47635450.shtml
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名_热心网友
2012-01-01 · TA获得超过719个赞
知道大有可为答主
回答量:3827
采纳率:0%
帮助的人:8358万
展开全部
你的jre没在配置的时候没有指定吧?
你的tomcat路径确定没选错吗?

jre也就是jdk路径。如果有需要可以远程协助一下你。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2d9e906
2011-12-21 · 超过35用户采纳过TA的回答
知道答主
回答量:284
采纳率:0%
帮助的人:151万
展开全部
楼上的已经不错 了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式