大神们 java将图片传在另外一个服务器怎么弄
使用一些已有的组件帮助我们实现这种上传功能。
常用的上传组件:
Apache 的 Commons FileUpload
JavaZoom的UploadBean
jspSmartUpload
以下,以FileUpload为例讲解
1、在jsp端
<form id="form1" name="form1" method="post" action="servlet/fileServlet" enctype="multipart/form-data">
要注意enctype="multipart/form-data"
然后只需要放置一个file控件,并执行submit操作即可
<input name="file" type="file" size="20" >
<input type="submit" name="submit" value="提交" >
2、web端
核心代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
requestsetCharacterEncoding("UTF-8");
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = uploadparseRequest(request);
Iterator itr = itemsiterator();
while (itrhasNext()) {
FileItem item = (FileItem) itrnext();
if (itemisFormField()) {
Systemoutprintln("表单参数名:" + itemgetFieldName() + ",表单参数值:" + itemgetString("UTF-8"));
} else {
if (itemgetName() != null && !itemgetName()equals("")) {
Systemoutprintln("上传文件的大小:" + itemgetSize());
Systemoutprintln("上传文件的类型:" + itemgetContentType());
Systemoutprintln("上传文件的名称:" + itemgetName());
File tempFile = new File(itemgetName());
File file = new File(scgetRealPath("/") + savePath, tempFilegetName());
itemwrite(file);
requestsetAttribute("uploadmessage", "上传文件成功!");
}else{
requestsetAttribute("uploadmessage", "没有选择上传文件!");
}
}
}
}catch(FileUploadException e){
eprintStackTrace();
} catch (Exception e) {
eprintStackTrace();
requestsetAttribute("uploadmessage", "上传文件失败!");
}
requestgetRequestDispatcher("/uploadResultjsp")forward(request, response);
}
多张有没有提供ftp信息给你 通过ftp上传
如果没有ftp信息的话 至少有服务器的信息吧 通过远程连接服务器 在服务器里面 你可以把打包传到百度网盘 在服务器里打开百度网盘进行下载即可
前台页面
<!--程序功能:文件上传程序的页面设计-->
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="5-05aspxcs" Inherits="_5_05" %>
<html xmlns="http://wwww3org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="上传" />
<br />
<br />
<asp:Label ID="Label5" runat="server" Font-Size="Larger" Height="33px" Text="上传成功!!!"
Visible="False" Width="300px"></asp:Label><br />
<asp:Label ID="Label1" runat="server" Height="40px" Width="450px"></asp:Label>
<br />
<asp:Label ID="Label2" runat="server" Height="46px" Width="450px"></asp:Label><br />
<asp:Label ID="Label3" runat="server" Height="35px" Width="450px"></asp:Label>
<br />
<asp:Label ID="Label4" runat="server" Height="37px" Width="450px"></asp:Label></div>
</form>
</body>
</html>
后台功能
//程序功能:后台功能代码,实现文件的上传
using System;
using SystemData;
using SystemConfiguration;
using SystemCollections;
using SystemWeb;
using SystemWebSecurity;
using SystemWebUI;
using SystemWebUIWebControls;
using SystemWebUIWebControlsWebParts;
using SystemWebUIHtmlControls;
public partial class _5_05 : SystemWebUIPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1PostedFile != null)
{
FileUpload1Visible = true;
string strDir = FileUpload1PostedFileFileName;
int myPos = strDirLastIndexOf("\\");
string strFileName = strDirSubstring(myPos);
string strPath = ServerMapPath("") + strFileName;
thisLabel2Text = "保存路径:";
thisLabel2Text += strPath;
FileUpload1PostedFileSaveAs(strPath);
thisLabel5Visible = true;
thisLabel1Text = "文件名称:";
thisLabel1Text += FileUpload1PostedFileFileName;
thisLabel3Text = "文件类型:";
thisLabel3Text += FileUpload1PostedFileContentType;
thisLabel4Text = "文件大小:";
thisLabel4Text += FileUpload1PostedFileContentLengthToString();
}
}
}
先假设有一FTP服务器,FTP服务器:qintithotnet,用户名:username 密码:user1234。在本地电脑D:盘创建一个文件夹"qint"。将要上传的文件复制到d:\qint里。通过FTP命令将文件从本地上传到服务器的步骤如下:
1“开始”-“运行”-输入“FTP”
2open qintithotnet
/这一步可以与第一步合并,在“运行”里直接输入"ftp qintithotnet"。如果你的FTP服务器不是用的21默认端口,假如端口是2121,那么此步的命令应在后面空格加2121,即“open qintithotnet 2121”/
3username
/提示你输入用户名/
4user1234
/提示你输入密码,密码不回显,打完密码后回车即可。如果你的密码输入错误,将不会提示你重新输入,这时你要键入“user”命令,将会出现第三步,你可以重新输入用户名和密码。/
5dir
/你成功登陆后就可以用dir查看命令查看FTP服务器中的文件及目录,用ls命令只可以查看文件。/
6mkdir qint
/在FTP服务器上根目录下建立qint目录。/
7cd qint
/进入目录qint,用“cd 你的目录名”可以进入当前目录的下一级目录,这跟DOS一样。/
8bin
/采用二进制传输。如果你要上传下载,这一步很重要,不先执行这个命令,上传下载会很慢。/
9lcd d:\qint
/定位本地默认文件夹,在前面我事先在D:盘创建的。/
10!dir
/查看本地文件夹中的文件及目录/
11put i001jpg
/将当前目录(d:\qint)中的文件i001jpg上传到FTP服务器默认目录。可以用"mput "将所有文件上传到FTP服务器上。/
需要这样的一个包 jcifs-1111
public static void forcdt(String dir){
InputStream in = null;
OutputStream out = null;
File localFile = new File(dir);
try{
//创建file类 传入本地文件路径
//获得本地文件的名字
String fileName = localFilegetName();
//将本地文件的名字和远程目录的名字拼接在一起
//确保上传后的文件于本地文件名字相同
SmbFile remoteFile = new SmbFile("smb://administrator:admin@10001/e$/aa/");
//创建读取缓冲流把本地的文件与程序连接在一起
in = new BufferedInputStream(new FileInputStream(localFile));
//创建一个写出缓冲流(注意jcifs-1315jar包 类名为Smb开头的类为控制远程共享计算机"io"包)
//将远程的文件路径传入SmbFileOutputStream中 并用 缓冲流套接
out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile+"/"+fileName));
//创建中转字节数组
byte[] buffer = new byte[1024];
while(inread(buffer)!=-1){//in对象的read方法返回-1为 文件以读取完毕
outwrite(buffer);
buffer = new byte[1024];
}
}catch(Exception e){
eprintStackTrace();
}finally{
try{
//注意用完操作io对象的方法后关闭这些资源,走则 造成文件上传失败等问题。!
outclose();
inclose();
}catch(Exception e){
eprintStackTrace();}
}
}
一个实例:
首先,在自己台式机和笔记本上都开通了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条评论