java实现图片上传至服务器并显示,如何做?希望要具体的代码实现
很简单。
可以手写IO读写(有点麻烦)。
怕麻烦的话使用FileUpload组件 在servlet里doPost嵌入一下代码
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
responsesetContentType("text/html;charset=gb2312");
PrintWriter out=responsegetWriter();
String uploadDir =getServletContext()getRealPath("/up");
Systemoutprintln(uploadDir);
if (uploadDir == null)
{
outprintln("无法访问存储目录!");
return;
}
//根据路径创建一个文件
File fUploadDir = new File(uploadDir);
if(!fUploadDirexists()){
if(!fUploadDirmkdir())//如果UP目录不存在 创建一个 不能创建输出
{
outprintln("无法创建存储目录!");
return;
}
}
if (!DiskFileUploadisMultipartContent(request))
{
outprintln("只能处理multipart/form-data类型的数据!");
return ;
}
DiskFileUpload fu = new DiskFileUpload();
//最多上传200M数据
fusetSizeMax(1024 1024 200);
//超过1M的字段数据采用临时文件缓存
fusetSizeThreshold(1024 1024);
//采用默认的临时文件存储位置
//fusetRepositoryPath();
//设置上传的普通字段的名称和文件字段的文件名所采用的字符集编码
fusetHeaderEncoding("gb2312");
//得到所有表单字段对象的集合
List fileItems = null;
try
{
fileItems = fuparseRequest(request);//解析request对象中上传的文件
}
catch (FileUploadException e)
{
outprintln("解析数据时出现如下问题:");
eprintStackTrace(out);
return;
}
//处理每个表单字段
Iterator i = fileItemsiterator();
while (ihasNext())
{
FileItem fi = (FileItem) inext();
if (fiisFormField()){
String content = figetString("GB2312");
String fieldName = figetFieldName();
requestsetAttribute(fieldName,content);
}else{
try
{
String pathSrc = figetName();
if(pathSrctrim()equals("")){
continue;
}
int start = pathSrclastIndexOf('\\');
String fileName = pathSrcsubstring(start + 1);
File pathDest = new File(uploadDir, fileName);
fiwrite(pathDest);
String fieldName = figetFieldName();
requestsetAttribute(fieldName, fileName);
}catch (Exception e){
outprintln("存储文件时出现如下问题:");
eprintStackTrace(out);
return;
}
finally //总是立即删除保存表单字段内容的临时文件
{
fidelete();
}
}
}
注意 JSP页面的form要加enctype="multipart/form-data" 属性, 提交的时候要向服务器说明一下 此页面包含文件。
如果 还是麻烦,干脆使用Struts 的上传组件 他对FileUpload又做了封装,使用起来更傻瓜化,很容易掌握。
-----------------------------
以上回答,如有不明白可以联系我。
一个实例:
首先,在自己台式机和笔记本上都开通了ftp,这个不会的同学可以网上查serv-u,相关教程肯定不少的。
然后在台式机本地做了个测试:
$ftp_server = "1921681100";
$ftp_user_name = "laohu";
$ftp_user_pass = "123456";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
$file = 'testtxt';
$remote_file = '/test/atxt';
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo "文件移动成功\n";
} else {
echo "移动失败\n";
}
ftp_close($conn_id);
运行后:文件移动成功。
要的就是这个效果了,之后用台式机做程序服务器,上传附件时全用ftp方法上传至笔记本上,笔记本ip是105,相应代码如下:
if (is_uploaded_file($_FILES['uploadfile']['tmp_name'])) {
$ftp_server = "1921681105";
$ftp_user_name = "lesley";
$ftp_user_pass = "123456";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
$file = $_FILES['uploadfile']['tmp_name'];
$remote_file = '/test/'$_FILES['uploadfile']['name'];
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo "文件:"$_FILES['uploadfile']['name']"上传成功\n";
} else {
echo "上传失败\n";
}
ftp_close($conn_id);
}
对应的前台页面代码:
<form action="uploadfilephp" method="post" enctype="multipart/form-data">
<input type="file" name="uploadfile" id="uploadfile" />
<input type="submit" name="submit" value="submit" />
</form>
运行后确实成功。
需要注意:
在用ftp_put方法时,第四个参数传送模式,需要用FTP_BINARY(二进制模式),用FTP_ASCII(文本模式)时,能上传但无法显示,其他文件重命名、中文乱码解决、上传权限控制等,就不在此提及了。
0条评论