`
chennaid2
  • 浏览: 53201 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
  • b_l_east: 在主动模式下,如果有多个客户端,服务器对每一个客户端均使用20 ...
    ftp

广告项目:(1 )文件上传

阅读更多

文件上传:

 

Struts文件上传心得:

 

1.使用 org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;这个拦截器,在action被调用之前,会首先走到fileUpload拦截器(对应的是FileUploadInterceptor类),在这个拦截器中,会先看一下request是不是 MultiPartRequestWrapper,如果不是,就说明不是上传文件用的request,fildUpload拦截器会直接将控制权交给下一个拦截器;如果是,就会把request对象强转为MultiPartRequestWrapper对象,然后调用hasErrors方法,看看有没有上传时候产生的错误,有的话,就直接加到了Action的错误(Action级别的)中了。另外,在fileUpload拦截器中会将MultiPartRequestWrapper对象中放置的文件全取出来,把文件、文件名、文件类型取出来,放到request的parameters中,这样到了params拦截器时,就可以轻松的将这些内容注入到Action中了,这也就是为什么fileUpload拦截器需要放在params拦截器前面的理由。在文件都放到request的parameters对象里之后,fileUpload拦截器会继续调用其他拦截器直到Action等执行完毕,他还要做一个扫尾的工作:把临时文件夹中的文件删除(这些文件是由commons-fileupload组件上传的,供你在自己的Action中将文件copy到指定的目录下,当action执行完了后,这些临时文件当然就没用了)。

 

2.Struts 2的文件上传,底层还是由apache的commons-fileupload 实现的。

 

3.配置文件:

<!-- 上传的文件存放目录 -->


 <constant name="struts.multipart.saveDir" value="tmp"/>
 
 
 <!-- 参数struts.multipart.maxSize 为文件尺寸   默认是2M,如果不进行配置上传超出2M,会抛出错误 -->
 <constant name="struts.multipart.maxSize" value="2000000" />

 

 

 

 

4.页面的标签:标签的名字一是“upload”

 

<input title="浏览..." value=""  id="file_id" name="upload" class="e_inputfile" onfocus="this.className='e_inputFocusfile'" onblur="this.className='e_inputfile'" type="file" /> 

 

5.1  页面代码:

 

upload.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
 String path = request.getContextPath();
 String basePath = request.getScheme() + "://"
   + request.getServerName() + ":" + request.getServerPort()
   + path + "/";
%>
<%@ taglib prefix="c" uri="/WEB-INF/tags/c.tld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>广告系统</title>
<link href="<%=path %>/css/platform.css" rel="stylesheet" type="text/css"  />

<!-- JQUERY 主要JS库 -->
<script type="text/javascript" src="<%=path %>/js/lib/jquery.js"></script>
<!-- JSTREE 主要JS库-->
<script type="text/javascript" src="<%=path %>/js/lib/jquery.cookie.js"></script>
<script type="text/javascript" src="<%=path %>/js/lib/jquery.hotkeys.js"></script>
<script type="text/javascript" src="<%=path %>/js/jquery.jstree.js"></script>
<script type="text/javascript" src="<%=path %>/js/util.js"></script>
<script type="text/javascript" src="<%=path %>/jquery/jquery.form.js"></script>

<script type="text/javascript">   
 function changeBody(index){    
  switch(index){    
   case 1:{    
    document.getElementById('wm-info').style.display = "";       
   break;    
   }    
  }   
 }   
 function close(){
  ocument.getElementById("wm-info").style.display ="none";       
 } 
</script>
<script type="text/javascript">

 var sel_node_id;
 
 //公共方法--获得dom对象
 function getObj(id){
  var obj = document.getElementById(id);
  return obj; 
 }
 
 //公共方法-选择下拉框的值
 function selectOptionVal(id){
  var positionVal="-1";
  var selectPobj = getObj(id);
  var options   = selectPobj.options;
  for(var i = 0; i < options.length; i++){
   var optionResult = options[i].selected ;
   if(optionResult){
    positionVal = options[i].value;
   }
  }
  return positionVal;
 }

 //检查input框,路径不能为空
 function checkFileName(){
  
  var uploadFilePath = getObj("file_id").value;
  //alert("上传文件的路径"+uploadFilePath);
  if(uploadFilePath == "" || uploadFilePath == null || uploadFilePath == undefined){
   alert("上传的文件不能为空!");
   return false;
  }
  return true;
 }
 
 //检查通过开始提交,后开始验证到上传文件
 function submitForm(nodeId,materialTypeVal,postionTypeVal,positionVal,iscover){
  var form = $("form[name=form1]"); //其中的form1是我form的名称   
    var options  = {   
   url:'<%=application.getContextPath() %>/material/checkMaterial.do',
   type:'post',
   dataType:'json',  
   data: {nodeTypeId:nodeId,materialType:materialTypeVal,postionType:postionTypeVal, positionId:positionVal,cover:iscover},   
   success:function(data){
    var flag = data.result; 
    if(flag){
     alert("上传成功");
    }else{
     alert("上传失败,原因:"+data.msg);
    }
          
    }  
   };  
        form.ajaxSubmit(options);  

 }
 
 //提交前先审核
 function checkFile(){

  var nodeId = getObj("treeNodeId").value;

  if(nodeId == null || nodeId == undefined){
   alert("请选择素材分类树的节点!");
   return;
  }
  
  //确定那个素材分类
  var materialType = selectOptionVal("sel_material_type");
  if(materialType == "-1"){
   alert("请选择-素材分类!");
   return;
  }
  
  //确定那个素材类型
  var postionType = selectOptionVal("sel_postion_type");
  if(postionType == "-1"){
   alert("请选择-素材类型!");
   return;
  }
  
  //确定那个广告位的素材
  var positionVal = selectOptionVal("sel_postion_id");
  if(positionVal == "-1"){
   alert("请选择-广告位!");
   return;
  }
  
  if(!checkFileName()){
   return;
  }

  var form = $("form[name=form1]"); //其中的form1是我form的名称  
        var options  = {  
    url:'<%=application.getContextPath() %>/material/checkFileName.do',
   type:'post',
   dataType:'json',  
   data: {nodeTypeId:nodeId},   
   success:function(data){
    var flag = data.result; 
    var isHasSame = data.isHasSame; 
    if(flag){
     if(isHasSame){
      if(confirm("有同名的文件,确定要覆盖吗?")){
       submitForm(nodeId,materialType,postionType,positionVal,1);
      }else{
       alert("请您修改上传文件的名字!");
      }
     }else{
      submitForm(nodeId,materialType,postionType,positionVal,0);
     }
    }else{
     alert("上传失败,原因:"+data.msg);
    }
    },
    async:false  
   };  
        form.ajaxSubmit(options);  

  
 }
 
</script>

<script type="text/javascript">

 //加载树
 function init(){
  $.ajax({
   type:"post",
   //url: getContextPath() + '/material/listMaterialType.do',
   url: "<%=application.getContextPath() %>/material/listMaterialType.do",
   dataType :"String",
   success:function(json){
    var str = json.replace(/\"id"/g, 'attr:{"id"');
    var str2 = str.replace(/\,"data"/g, '},data');
    var jsondata = eval(str2);
       jtree(jsondata);
   },
   error:function(){
    alert("服务器异常,请稍后重试!");
   },
   async:false
  });
  }   
    
  function jtree(o){
   var ctxPath = "<%=path%>";
   $("#tree").jstree(
    //json加载数据节点     
    {  
   
     //json数据区域 
        "json_data" :{data:o}
      ,
     //要使用到的插件
            "plugins" : [ "themes", "json_data", "ui", "crrm", "cookies", "types"]
                ,
             "types" : {
              "max_depth" : -2,
              "max_children" : -2,
              "valid_children" : [ "drive" ],
              "types" : {
               "default" : {
                "valid_children" :"none",
                "icon" : {
                 "image" : ctxPath+"/images/folder.png"
                }
               }
              }
             }
          })
       
      //选择事件
   .bind("select_node.jstree", function(e, data) {
          var id = parseInt(data.rslt.obj.attr("id"));
          document.getElementById("treeNodeId").value =id;
         })
                 
  }
</script>
</head>
<body onload="init()">

<!--
 <form action=""  id="form1" name="form1"  enctype="multipart/form-data" >
 -->
<form action=""  id="form1" name="form1"  >

<input type="hidden" value="" id="treeNodeId" />

 <table cellpadding="0" cellspacing="1" class="servicesT">
  <tr>
   <th class="formTitle" colspan="99">
    <span>上传素材</span>  
   </th>
  </tr>
  <tr>
   <td class="td_label">选择素材分类:</td>
   <td class="td_input">
    <select id="sel_material_type"   onchange="selectOptionVal(this.id)"  class="e_select" onfocus="this.className='e_selectFocus'" onblur="this.className='e_select'" >
     <option id="ad_id" value="-1">请选择...</option>
     <c:forEach items="${mKindList}" var="materialBean">
      <option  value="${materialBean.id }">${materialBean.name }</option>
     </c:forEach>
    
    <!--
    <option value="0" >文字</option>
    <option value="1" >图片</option>
    <option value="2" >视频</option>
    <option value="3" >压缩包</option>
     -->
    </select>  
   </td>
   <td class="td_label">选择素材类型:</td>
   <td class="td_input">
    <select id="sel_postion_type"  onchange="selectOptionVal(this.id)"  class="e_select"  onfocus="this.className='e_selectFocus'"  onblur="this.className='e_select'" >
     <option id="ad_id" value="-1">请选择...</option>
     <c:forEach items="${mTypeList}" var="materialBean">
      <option  value="${materialBean.id }">${materialBean.name }</option>
     </c:forEach>
    <!--
     <option value="1" >标清</option>
     <option value="2" >高清</option>
    -->
    </select>  
   </td>
   <!-- <td class="td_label">选择广告位:</td>
   <td class="td_input">
    <select  id="sel_postion_id" onchange="selectOptionVal(this.id)"   class="e_select"  onfocus="this.className='e_selectFocus'" onblur="this.className='e_select'" >
     <option id="ad_id" value="-1">请选择...</option>
     <c:forEach items="${pNameList}" var="positionBean">
      <option  value="${positionBean.id }">${positionBean.positionNameCn }</option>
     </c:forEach>
    
     <option id="ad_id" value="1">换台广告</option>
     <option id="ad_id" value="2">音量广告</option>
     <option id="ad_id" value="3">频道列表广告</option>
     <option id="ad_id" value="4">循环播放广告</option>
     <option id="ad_id" value="5">菜单广告</option>
    
    </select>  
   </td>  -->
  </tr>
  <tr>
   
   <td class="td_label">选择广告位:</td>
   <td class="td_input"><select  id="sel_postion_id" onchange="selectOptionVal(this.id)"   class="e_select"  onfocus="this.className='e_selectFocus'" onblur="this.className='e_select'" >
     <option id="ad_id" value="-1">请选择...</option>
     <c:forEach items="${pNameList}" var="positionBean">
      <option  value="${positionBean.id }">${positionBean.positionNameCn }</option>
     </c:forEach>
    <!--
     <option id="ad_id" value="1">换台广告</option>
     <option id="ad_id" value="2">音量广告</option>
     <option id="ad_id" value="3">频道列表广告</option>
     <option id="ad_id" value="4">循环播放广告</option>
     <option id="ad_id" value="5">菜单广告</option>
     -->
    </select> </td>
    <td class="td_label">选择文件:</td>
   <td class="td_input">
    <input title="浏览..." value=""  id="file_id" name="upload" class="e_inputfile" onfocus="this.className='e_inputFocusfile'" onblur="this.className='e_inputfile'" type="file" />  </td>
     </tr>
  <tr>
   <td class="td_labela">选择类型:<br /><br />(大类别包括多个小类别)</td>
   <td colspan="5" class="td_inputaa" valign="top">
   <div id="tree" class="tree"  ></div>
  
   
   </td>
     </tr>
  
  <tr>
   <td class="formBottom" colspan="99">
    <input name="Submit"
    type="button"
    title="上传"
    class="b_next"
    value=""
    onclick="checkFile()"
    />
     
             </td>   
               
  </tr>
 </table>
</form>
</body>
</html>


5.2 struts.xml配置文件代码

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
 <!-- global -->
 <include file="struts-default.xml" />
 <include file="struts-plugin.xml" />

 <include file="struts/struts-playItem.xml" />
 <include file="struts/struts-twowayAdvert.xml" />

 <constant name="struts.enable.DynamicMethodInvocation" value="false" />

 <!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
 <constant name="struts.i18n.encoding" value="UTF-8" />
 
 <!-- 配置国际化相关信息 -->
 <constant name="struts.custom.i18n.resources" value="struts.messageResource" />

 <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
 <constant name="struts.serve.static.browserCache" value="false" />

 <!-- 开发模式下使用,这样可以打印出更详细的错误信息
 <constant name="struts.devMode" value="true" /> -->
 <constant name="struts.devMode" value="false" />
 
 <!-- 上传的文件存放目录 -->
 <constant name="struts.multipart.saveDir" value="tmp"/>
 
 
 <!-- 参数struts.multipart.maxSize 为文件尺寸   默认是2M,如果不进行配置上传超出2M,会抛出错误 -->
 <constant name="struts.multipart.maxSize" value="2000000" />

 <!-- 把action对象交给spring创建 -->
 <constant name="struts.objectFactory" value="spring" />
 
 
 <!-- 如果不是用action作为扩展名,则需要在这个地方配置扩展名,否则映射不上 -->
 <constant name="struts.action.extension" value="do" />
 

 <package name="material" namespace="/material" extends="struts-default">
  <action name="listMaterial" class="materialAction" method="getTypes" />
  <action name="listMaterialType" class="materialAction" method="listMaterialType" />
  <action name="addMaterialType" class="materialAction" method="addMaterialType" />
  <action name="delMaterial" class="materialAction" method="deleteMaterialType" />
  <action name="updateMaterial" class="materialAction" method="updateMaterialType" />
  <action name="getMaterialTypePath" class="materialAction" method="getMaterialTypePath" />
  <action name="findMaterial" class="materialAction" method="findMaterial" >
   <result name="success" >/page/material/materialFind.jsp</result>
  </action> 
  
  <action name="checkFileName" class="materialAction" method="checkFileName" />
  <action name="checkMaterial" class="materialAction" method="uploadMaterial" />
  <action name="toUploaldFile" class="materialAction" method="showUploaldMaterial" >
   <result name="success">/page/material/add.jsp</result>
   
  </action>
  
  
 </package>
  
</struts>

5.3 action的代码:

public class MaterialAction extends BaseActionSupport<Object> implements ServletRequestAware{
 


  String tempPath = MATERIAL_TEMP_DIR + _SEPARATOR + materialName;
  File dstFile = new File(tempPath);
  
  /**  复制到临时文件夹内 */
  int fileSize;
  try {
   fileSize = FileOperate.copyFile2FileSize(this.upload, dstFile);

 

 

 

BaseActionSupport

 

package com.dvnchina.itv.advert.action;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;

import com.dvnchina.itv.advert.utils.GenericsUtil;
import com.opensymphony.xwork2.ActionSupport;

public class BaseActionSupport<T> extends ActionSupport{
 
 private static final long serialVersionUID = 1510137542622373146L;
 
 protected final Log log = LogFactory.getLog(getClass());
 
 protected final static String SPE = File.separator;
 
 /**
  * id主键
  */
 protected Long id;
 
 /**
  * 多个id字符串,以"逗号"分割
  */
 protected String ids;
 
 /**
  * 工程的contextPath
  */
 protected String contextPath;
 
 /**
  * extJs的页号
  */
 protected int start;
 
 /**
  * extJs的分页记录
  */
 protected int limit;
 
 /**
  * 页号
  */
 protected int pageNo;
 
 /**
  * 每页记录数
  */
 protected int pageSize;
 
 /**
  * 表格查询参数
  */
 protected String query;
 
 
 /**
  * json格式数据
  */
 protected String dataJson;
 
 /**
  * 上传的文件
  */
 protected File upload;
 
 /**
  * 上传文件类型属性
  */
 protected String uploadContentType;
 
 /**
  * 上传的文件名
  */
 protected String uploadFileName;
 
 @SuppressWarnings("unchecked")
 protected Class clazz;

 @SuppressWarnings("unchecked")
 protected Class getClazz() {
  return clazz;
 }
 
 @SuppressWarnings("unchecked")
 public BaseActionSupport() {
  Class genericClass = GenericsUtil.getGenericClass(getClass());
  clazz = genericClass;
 }
 
 /**
  * render Text
  */
 public void renderText(String content) {
  try {
   HttpServletResponse response = ServletActionContext.getResponse();
   response.setContentType("text/plain");
   response.setCharacterEncoding("UTF-8");
   PrintWriter out = response.getWriter();
   out.print(content);
   out.flush();
   out.close();
   
  } catch (IOException e) {
   log.error(e);
  }
 }

 /**
  * render HTML
  */
 public void renderHtml(String content) {
  HttpServletResponse response = null;
  PrintWriter out  = null;
  try {
   response = ServletActionContext.getResponse();
   response.setContentType("text/html");
   response.setCharacterEncoding("UTF-8");
   out = response.getWriter();
   out.print(content);
   out.flush();
  } catch (IOException e) {
   log.error("输出提示信息时出现异常",e);
  } finally{
   if (out!=null) {
    out.close();
   }
  }
 }

 /**
  * render XML
  */
 public void renderXML(String content) {
  try {
   HttpServletResponse response = ServletActionContext.getResponse();
   response.setContentType("text/xml");
   response.setCharacterEncoding("UTF-8");
   PrintWriter out = response.getWriter();
   out.print(content);
   out.flush();
   out.close();
   
  } catch (IOException e) {
   log.error(e);
  }
 }

 /**
  * render json
  */
 public void renderJson(String content) {
  try {
   HttpServletResponse response = ServletActionContext.getResponse();
   response.setContentType("text/json");
   response.setCharacterEncoding("UTF-8");
   PrintWriter out = response.getWriter();
   out.print(content);
   out.flush();
   out.close();
  } catch (IOException e) {
   log.error(e.getMessage(), e);
  }
 }
 
 public PrintWriter getWriter(String encoding) throws IOException{
     HttpServletResponse response = ServletActionContext.getResponse();
     response.setContentType("text/html");
     response.setCharacterEncoding(encoding);
     PrintWriter out = response.getWriter();
     return out;
 }

 /**
  * 取得request
  * @return
  */
 public HttpServletRequest getRequest(){
  HttpServletRequest request = ServletActionContext.getRequest();
  return request;
 }
 
 /**
  * 取得MultipartRequest
  * 上传文件使用
  * @return
  */
 public MultiPartRequestWrapper getMutipartRequest(){
  MultiPartRequestWrapper mulRequest = (MultiPartRequestWrapper) ServletActionContext.getRequest();
  return mulRequest;
 }
 
 /**
  * get userName from session
  */
 public static String getUserNameFromSesssion() {
  String name = (String) ServletActionContext.getRequest().getSession().getAttribute("username");
  return name;
  
 }
 
 /**
  * get conf from configuration.properties
  */
 public static String getPropertiesValue(String key) {
//  PropertiesUtil.init("configuration.properties");
//  String value = PropertiesUtil.getProperty(key,"");
//  return value;
  return null;
 }
 
 /**
  * 页面跳转
  */
 public String forWard() throws Exception {
  return SUCCESS;
 }
 
 /**
  * get project realPath
  */
 public String getRealPath() {
  HttpServletRequest request = (HttpServletRequest) ServletActionContext.getRequest();
  String path = request.getSession().getServletContext().getRealPath("/");
  return path;
 }
 
 /**
  * 获取Response
  * @return
  */
 public HttpServletResponse getResponse(){
  HttpServletResponse response = ServletActionContext.getResponse();
  return response;
 }

 public String getContextPath() {
  return contextPath;
 }

 public void setContextPath(String contextPath) {
  this.contextPath = contextPath;
 }

 public void setQuery(String query) {
  this.query = query;
 }

 public Long getId() {
  return id;
 }

 public void setId(Long id) {
  this.id = id;
 }

 
 public int getStart() {
  return start;
 }

 public void setStart(int start) {
  this.start = start;
 }

 public int getLimit() {
  return limit;
 }

 public void setLimit(int limit) {
  this.limit = limit;
 }

 public String getDataJson() {
  return dataJson;
 }

 public void setDataJson(String dataJson) {
  this.dataJson = dataJson;
 }

 public String getIds() {
  return ids;
 }

 public void setIds(String ids) {
  this.ids = ids;
 }

 public File getUpload() {
  return upload;
 }

 public void setUpload(File upload) {
  this.upload = upload;
 }

 public String getUploadContentType() {
  return uploadContentType;
 }

 public void setUploadContentType(String uploadContentType) {
  this.uploadContentType = uploadContentType;
 }

 public String getUploadFileName() {
  return uploadFileName;
 }

 public void setUploadFileName(String uploadFileName) {
  this.uploadFileName = uploadFileName;
 }
}

 

分享到:
评论

相关推荐

    广告项目:(3)FTP文件上传、Freemarker、文件操作等等工具类

    NULL 博文链接:https://chennaid2.iteye.com/blog/1507737

    1:24文本广告交换系统

    从压缩包文件名称 "php1:24文本广告交换系统4242" 来看,这可能包含了源代码文件、配置文件、数据库脚本以及可能的文档资料。开发者可以研究这些文件来了解系统的架构和工作原理,甚至可以对其进行定制或扩展,以...

    zcw广告管理、ajax文件上传、接口文档实例.rar

    综合来看,这个压缩包提供了一个广告管理系统的实例,其中可能包含了用于实现广告管理的后台接口以及前端的Ajax文件上传功能。开发者可以通过查看接口文档来理解如何与广告管理系统进行数据交互,同时利用Ajax技术...

    大文件上传NeatUpload(带进度条,去掉Powered by NeatUpload)

    通过以上步骤,你可以成功地在项目中集成并定制NeatUpload,实现大文件上传并去除不必要的标识。不过,要注意遵守开源软件的许可协议,尊重作者的权益。同时,持续关注NeatUpload的更新,以获取最新的功能和安全修复...

    广告系统源码asp广告系统源码asp

    4. **广告素材管理**:支持上传、预览和管理各种类型的广告素材,如图片、视频、富媒体等。 5. **广告统计与分析**:提供详细的广告点击率、曝光量、转化率等数据报告,帮助优化广告效果。 6. **支付与结算**:广告...

    广告管理系统(J2EE)

    3. 广告创建与编辑:允许广告主上传广告素材,设置广告的展示时间、频率、目标受众等参数。 4. 投放策略:根据广告主的需求和系统策略,智能匹配合适的广告投放策略,如基于用户行为、地理位置或时间的定向投放。 5....

    素材忘记上传了,现在把源文件和影片文件压缩上传

    "素材忘记上传了,现在把源文件和影片文件压缩上传"这句话暗示了我们正在处理一个与Flash创作相关的项目。在这个项目中,创作者可能在初次上传时遗漏了一些关键文件,包括源文件和最终的播放文件。现在,他们已经将...

    毕设项目基于ARM-Linux的模拟电梯系统源码+项目说明.zip

    1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合...

    [GooglePlaySDK],[GoogleMobile广告]完整商业项目

    在本文中,我们将深入探讨如何将GooglePlaySDK和GoogleMobile广告SDK集成到你的移动应用程序中,以便实现完整的商业项目需求。这两个SDK对于开发者来说是非常重要的工具,因为它们可以帮助你不仅在Google Play商店...

    多图片广告展示java小程序

    【压缩包子文件的文件名称列表】"javaxiaosxu"看起来可能是这个Java项目的文件名,但这个名字本身并不直接对应Java的任何标准包或类。通常,Java的源文件以`.java`为扩展名,而编译后的类文件以`.class`为扩展名。...

    discuz所有文件说明

    1. **index.htm**:每个目录下都有一个 index.htm 文件,其作用是防止目录被非法浏览。 2. **admincp.php**:管理员后台系统的核心文件之一,用于显示管理员权限设置界面。 3. **ajax.php**:提供 AJAX 请求处理...

    广告策划网站源码

    2. **广告发布**:允许客户上传和管理他们的广告创意,设定展示时间和位置。 3. **项目策划**:提供在线策划工具,帮助客户制定广告策略,可能包括目标设定、预算分配、媒介选择等。 4. **效果追踪**:集成数据分析...

    hadoop上传文件共5页.pdf.zip

    【标题】"hadoop上传文件共5页.pdf.zip" 暗示了这是一个关于Hadoop文件上传的教程或文档,被压缩成一个ZIP文件,包含了5页的PDF内容。Hadoop是一个开源的分布式计算框架,它允许在大规模数据集上进行高效、可靠和可...

    广告浮动,工具类

    2. `upload`: 可能是上传工具,与广告图片的上传和管理有关,允许用户上传广告素材。 3. `json`: JSON文件可能包含配置信息,如广告的布局、位置、显示时间等,方便进行动态配置。 4. `file`: 可能存储了广告图片或...

    毕业设计小项目(广告发布系统)

    【广告发布系统】是一个典型的IT项目,主要用于提供一个平台,让用户和管理员能够进行广告的发布、管理和交互。在这个系统中,我们关注的核心功能包括用户登录、管理员权限管理、图片上传与展示、用户信息管理、广告...

    ASP源码—广告联盟网站推广系统 v3.0.zip

    系统需要提供广告上传、审核、支付和效果追踪等功能。 3. **网站主管理**:网站主可以申请加入联盟,获取广告代码并在自己的网站上展示。系统应有统计网站流量和点击率的能力,以便计算分成。 4. **广告匹配与投放...

    PHP广告设计大赛广告展示平台 广告管理系统

    这涉及到文件上传、图片处理(如缩略图生成)、广告状态管理(如审核、激活、暂停)等技术。 5. **广告投放策略**:系统可能需要支持不同的广告投放策略,如按时间、按点击量、按展示量计费。这需要对广告展示进行...

    文案馆头像壁纸小程序源码+带后台+部署教程

    这个项目的主要目标是提供一个平台,用户可以在上面浏览、下载或定制个性化的头像和壁纸,同时具备推广和广告功能。 一、微信小程序介绍: 微信小程序是腾讯公司推出的一种轻量级应用开发框架,无需安装即可在微信...

    基于ASP的清水阁JS广告管理系统.zip

    4. **文件操作**:ZIP文件的使用表明系统可能涉及到文件上传、下载或管理,比如广告素材的存储。 5. **服务器配置**:部署此类系统需要了解IIS(Internet Information Services)或其他Web服务器的配置,确保ASP...

Global site tag (gtag.js) - Google Analytics