上传图片到FTP服务器,报500错误
考虑到只有500问题,没有给出具体错误信息,给出以下几个可能的原因,可以配合服务器端查一下:
大小问题,试试尺寸是否有问题。
格式问题。
服务器端超级超时。
500一般是服务器处理内部处理错误排除的异常。
前言:
关于vue和elementui安装导入使用不做介绍
1template中首先展示upload多张上传
2当upload组件发生改变时处罚addFile
3提交到服务器,拿到服务器的数据地址
3显示 将拿到的数据放进一个数组中显示到file-list中去就好了
至此,完结。
有不对的地方欢迎指导哦。
1、安装插件程序方正影像采集插件安装包_I_v30740exe
2、根据技术人员提供的HTMLdemo进行开发
增加摄像预览控件,客户不需要预览,因此我进行了隐藏
增加按钮事件方法,另外由于初始化需要一定的时间,技术人员说是3秒,因此我设置了一个等待3秒再执行拍摄的方法。最后得到图像的Base64字符流传至后台进行上传到服务器
commonServicesashx 文件上传方法
我们使用一些已有的组件帮助我们实现这种上传功能。
常用的上传组件:
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);
}
<form method=post action="uploadphp" ENCTYPE="multipart/form-data">
<input type="file" name="upload_file">
<input type="submit" name="submit" value="上传文件">
用PHP上传时,需要对内容作详细的检查,例如是否容许读写文件,文件格式、文件大小是否在你指定的大小内等。
<
$file_size_max = 1000000;
// 限制文件上传最大容量(bytes)
$store_dir = "/public/www/upload/";
// 上传文件的储存位置
$accept_overwrite = true;
//允许读写文件
// 检查文件大小
if ($upload_file_size > $file_size_max) {
echo "对不起,你的文件容量大于规定";
exit;
}
// 检查读写文件
if (file_exists($store_dir $upload_file_name) &&&& !$accept_overwrite) {
echo "文件已存在,不能再复制";
exit;
}
//复制文件到指定目录
if (! @ copy($upload_file,$store_dir $upload_file_name)) {
echo "复制文件失败";
exit;
}
echo "上传文件完成";
>
一个实例:
首先,在自己台式机和笔记本上都开通了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(文本模式)时,能上传但无法显示,其他文件重命名、中文乱码解决、上传权限控制等,就不在此提及了。
需要这样的一个包 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();}
}
}
0条评论