电子商务购物商城系统设计与实现

本文章已经生成可运行项目,

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本项目为在线购物平台,核心功能包括用户注册与登录、购物车管理以及支付流程。用户注册和登录模块收集并验证用户信息,购物车允许用户临时存储并管理商品,支付功能支持多种支付方式并确保交易安全。项目涵盖前端界面构建、后端服务开发、数据库管理,并使用安全技术保障系统。所有源代码、数据库脚本及配置文件打包为“购物商城”。

1. 电子商务系统全周期开发

在当今数字化时代,构建一个电子商务系统是企业拓展市场、提高竞争力的关键途径。全周期开发涵盖了从概念验证、需求分析、设计实现,直到部署上线和后期维护的全过程。它要求开发团队具备综合技能,包括但不限于系统架构设计、前后端开发、数据库管理、API开发、安全性考量以及持续集成/持续部署(CI/CD)流程。

1.1 项目启动与需求分析

在项目的启动阶段,关键在于理解业务目标并将其转化为技术需求。这需要与企业方进行密切沟通,收集并明确功能需求、性能指标、安全合规性以及预算范围等要素。需求分析应该详尽到能够为项目后续阶段提供清晰指导。

1.2 系统设计与开发

电子商务系统设计是将需求转化为技术架构的过程,这通常涉及以下步骤:

  • 技术架构设计 :决定使用哪种技术栈,包括开发语言、框架、数据库、服务器配置等。
  • 界面设计 :设计用户友好的界面,提供良好的用户体验。
  • 功能模块化 :将系统分割成多个模块,比如用户管理、商品管理、支付处理等,并定义模块间的交互接口。
  • 开发计划制定 :制定详细的开发计划,并采用敏捷开发方法进行迭代开发和测试。

1.3 测试与部署

系统开发完毕后,进行充分的测试以确保系统质量是至关重要的。测试过程包括单元测试、集成测试和性能测试。一旦测试通过,系统便可以部署到服务器上,并通过持续集成/持续部署(CI/CD)流程进行更新和维护。

整个全周期开发不仅涉及技术实现,更是一个项目管理和团队协作的过程。掌握这些知识将有助于开发者更好地理解和参与电子商务系统的设计与开发。

2. 用户注册与登录功能实现

2.1 用户注册模块的设计与实现

2.1.1 注册流程设计

用户注册是电子商务系统中至关重要的一环,它不仅关系到用户体验,还直接影响到系统的安全性。一个有效的注册流程应该包括用户信息输入、验证、存储和确认几个关键步骤。

注册流程通常开始于用户界面,用户需要填写用户名、密码、电子邮件地址等信息,并同意服务条款。提交注册信息后,系统会对这些数据进行验证。验证失败时,系统会反馈错误信息并要求用户重新输入。验证成功后,系统会将数据加密后存储到数据库中,并向用户发送一封含有确认链接的邮件,用户点击链接确认后,才算完成注册流程。

2.1.2 数据校验与安全机制

数据校验是注册过程中保证数据准确性和安全性的关键步骤。基本的数据校验包括非空校验、格式校验(如邮箱格式、电话号码格式)以及强度校验(如密码复杂度)。这些校验可以通过前端JavaScript进行,也可由后端API进行再次校验来确保安全。

除了数据校验,安全机制还包括防止SQL注入、XSS攻击、暴力破解等攻击手段。为了防止SQL注入,可以使用参数化查询;为了防止XSS攻击,可以在服务器端对用户输入的HTML进行清理;而防止暴力破解则需要配合验证码等机制。

代码块展示:

import re
from flask import Flask, request, jsonify
from werkzeug.security import generate_password_hash

app = Flask(__name__)

@app.route('/register', methods=['POST'])
def register():
    data = request.json
    username = data.get('username')
    password = data.get('password')
    email = data.get('email')

    # 数据校验
    if not all([username, password, email]):
        return jsonify({'message': 'All fields are required'}), 400
    if not re.match(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$', email):
        return jsonify({'message': 'Invalid email format'}), 400

    # 密码加密
    hashed_password = generate_password_hash(password)

    # 假设这里是数据库操作
    # db.add_user(username, hashed_password, email)
    return jsonify({'message': 'User registered successfully'}), 201

if __name__ == '__main__':
    app.run(debug=True)

在上述代码示例中,我们使用了Flask框架创建了一个简单的注册API。通过正则表达式验证电子邮件格式,并使用 werkzeug.security 模块的 generate_password_hash 函数对密码进行加密处理。

2.2 用户登录模块的设计与实现

2.2.1 登录流程设计

用户登录流程相较于注册流程来说,流程上更简洁,但安全要求却更高。通常的登录流程包括用户输入账号密码、验证账号密码是否匹配、生成会话以及登录成功或失败的提示。

在验证账号密码时,通常会使用数据库查询来匹配用户信息,并将用户密码的散列值与数据库中存储的散列值进行比对。成功匹配后,系统会生成一个会话(Session),通常是通过设置cookie来保持会话状态。

2.2.2 会话管理与持久化

在Web应用中,会话管理是控制用户登录状态的一种机制。会话信息通常存储在服务器端,而客户端通过cookie来传递会话标识(如session_id)。

为了提高用户体验,可以设置会话的持久化,即使浏览器关闭后,用户的登录状态仍然保持一段时间。但是,为了系统安全,应设置合理的超时机制,防止长时间未操作的用户会话被滥用。

代码块展示:

from flask import Flask, request, make_response

app = Flask(__name__)
app.secret_key = 'your_secret_key'

@app.route('/login', methods=['POST'])
def login():
    data = request.json
    username = data.get('username')
    password = data.get('password')

    # 假设这里是数据库查询操作
    # user = db.get_user_by_username(username)
    # if user and user.password == password:
    #     session_id = create_session(user.id)
    #     response = make_response(jsonify({'message': 'Login successful'}), 200)
    #     response.set_cookie('session_id', session_id)
    #     return response
    # else:
    #     return jsonify({'message': 'Invalid credentials'}), 401

    # 模拟登录成功
    session_id = 'abcd1234'
    response = make_response(jsonify({'message': 'Login successful'}), 200)
    response.set_cookie('session_id', session_id)
    return response

if __name__ == '__main__':
    app.run(debug=True)

以上示例代码使用了Flask框架创建了一个登录API。通过模拟数据库查询来验证用户信息,并生成一个假定的 session_id 存储在cookie中。需要注意的是,在实际应用中,应该严格检查用户输入,并使用安全的会话管理机制。

在设计用户注册与登录模块时,需要充分考虑用户体验和系统安全性,以保证电子商务系统的稳定运行。

3. 购物车管理功能实现

在当今电子商务系统中,购物车是用户购买商品的核心组件。它允许用户添加商品,修改数量,甚至在决定购买前保存商品。购物车功能的良好实现直接影响用户体验和销售转化率。本章将深入探讨购物车管理功能的实现,从购物车的数据模型与存储开始,再到购物车操作的前后端交互,展现如何在不同场景下为用户打造流畅的购物体验。

3.1 购物车数据模型与存储

3.1.1 购物车商品的数据结构设计

设计一个高效的购物车系统首先要从数据模型开始。购物车数据结构设计需要考虑以下几个关键点:

  • 商品ID :用于标识每个商品,通常与数据库中商品表的主键相对应。
  • 数量 :用户希望购买的商品数量。
  • 选项 :如果商品有不同选项(如尺寸、颜色等),则需要记录用户选择的选项。
  • 价格 :商品当前价格,需要实时从商品库中获取,因为商品价格可能会变动。

为了优化存储和查询效率,我们通常使用如下的数据模型:

CREATE TABLE cart_items (
    cart_item_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    selected_options TEXT,
    product_price DECIMAL(10,2) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (product_id) REFERENCES products(id)
);

3.1.2 数据存储与查询优化

购物车的数据存储需要考虑如何实现快速的查询和更新操作,以提供良好的用户体验。下面是一些优化的策略:

  • 索引的使用 :为 user_id , product_id 等频繁查询的字段创建索引,提高查询速度。
  • 数据分片 :如果用户量很大,可以考虑将购物车数据分片存储,通过用户ID或者其他逻辑分片键来划分数据。
  • 缓存机制 :将热门商品的购物车数据缓存到内存中,如 Redis,以便快速读取和写入。

例如,如果使用 Redis 存储购物车数据,可以利用其哈希数据结构来存储单个商品的数据:

# 添加商品到购物车
HMSET cart:123 "product_id" 456 "quantity" 2 "product_price" "19.99"

# 获取购物车商品
HGETALL cart:123

3.2 购物车操作的前后端交互

购物车的操作主要涉及添加商品、修改商品数量和删除商品。这些操作都需要与后端服务进行交互,确保数据的一致性和安全性。

3.2.1 添加商品到购物车的交互逻辑

添加商品到购物车的逻辑需要处理商品的添加以及数量的更新。以下是一个典型的交互流程:

  1. 用户在商品详情页点击“加入购物车”按钮。
  2. 前端发送请求到后端,携带商品ID和数量等信息。
  3. 后端检查商品库存,如果库存足够则将商品添加到购物车中,更新数量。
  4. 前端接收到响应后更新购物车界面。
// 前端示例代码
async function addToCart(productId, quantity) {
  const response = await fetch(`/api/cart`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ product_id: productId, quantity: quantity })
  });
  const data = await response.json();
  if (response.ok) {
    // 更新购物车界面
    updateCartUI(data);
  } else {
    // 错误处理
    handleError(data.error);
  }
}

3.2.2 购物车商品的修改与删除

修改商品数量或删除商品也是购物车管理中常见的操作。操作流程类似于添加商品,但会根据具体需求选择不同的HTTP方法:

  • 修改商品数量 :使用 PUT 或 PATCH 方法,传递商品ID和新的数量信息。
  • 删除商品 :使用 DELETE 方法,传递商品ID。
// 修改商品数量的前端示例代码
async function updateQuantity(productId, newQuantity) {
  const response = await fetch(`/api/cart/${productId}`, {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ quantity: newQuantity })
  });
  const data = await response.json();
  if (response.ok) {
    // 更新购物车界面
    updateCartUI(data);
  } else {
    // 错误处理
    handleError(data.error);
  }
}

// 删除商品的前端示例代码
async function removeItemFromCart(productId) {
  const response = await fetch(`/api/cart/${productId}`, {
    method: 'DELETE'
  });
  const data = await response.json();
  if (response.ok) {
    // 更新购物车界面
    updateCartUI(data);
  } else {
    // 错误处理
    handleError(data.error);
  }
}

在实际应用中,购物车功能的实现还需要考虑并发访问、分布式系统的一致性问题等复杂场景。通过精心设计数据模型、优化数据库操作以及实现前后端良好的交互逻辑,可以提供更流畅、更安全的购物体验。

本章节展示了购物车管理功能的核心实现,从数据结构设计到前后端的交互逻辑,每一步都是为了确保最终用户体验的优良。通过不断优化和调整,开发者能够为电子商务系统打造一个高效、稳定和用户友好的购物车功能。

4. 商品浏览与筛选机制

商品浏览与筛选机制是电子商务系统中的核心功能之一,它直接关系到用户购物体验的好坏。本章我们将深入探讨商品信息的展示与管理,以及如何通过技术手段实现高效的商品筛选与排序功能。

4.1 商品信息的展示与管理

商品信息的展示与管理是用户在浏览电商平台时首先接触到的功能,它需要通过一个直观且易于操作的界面展示商品列表和详情。合理的展示与管理机制不仅能提升用户体验,还能提高商品的销量。

4.1.1 商品列表与详情页设计

商品列表页面是用户浏览商品的起始页面,其设计需要简洁明了,能够快速吸引用户的注意力。商品的图片、标题、价格等基本信息要一目了然,方便用户进行初步筛选。同时,商品列表页面应该支持多种排序功能,如按照价格、销量或评价进行排序。

<!-- 商品列表的简化HTML结构 -->
<div class="product-list">
    <div class="product-item" data-id="1">
        <img src="product1.jpg" alt="商品图片">
        <h3>商品名称</h3>
        <p>商品描述</p>
        <span>价格</span>
    </div>
    <!-- 更多商品项... -->
</div>

商品详情页面则需要展示更详细的信息,包括但不限于商品的详细描述、规格参数、用户评价等。同时,还需要提供易于操作的购买按钮、购物车添加功能以及商品推荐。

<!-- 商品详情页的简化HTML结构 -->
<div class="product-detail">
    <img src="product_detail.jpg" alt="商品详情图片">
    <div class="description">
        <h2>商品名称</h2>
        <p>商品详细描述</p>
        <ul class="specifications">
            <li>规格1: 值</li>
            <li>规格2: 值</li>
            <!-- 更多规格... -->
        </ul>
    </div>
    <!-- 购买、评价、推荐等部分... -->
</div>

4.1.2 商品信息的动态更新与维护

商品信息的动态更新与维护是保证商品列表准确性的关键。系统需要支持批量更新商品信息,包括价格、库存、促销活动等,并且要能够快速响应市场变化。在技术实现上,可以通过定时任务来同步最新的商品信息,确保用户看到的是最新数据。

-- SQL示例:更新商品价格
UPDATE products
SET price = 299.99
WHERE product_id = 1;

为了保证系统的高性能,商品信息的更新操作通常不会立即在列表页面上显示,而是通过定时任务异步完成。

4.2 商品筛选与排序功能

商品筛选与排序功能是提升用户购物体验的重要途径。通过提供高效的筛选和排序机制,用户可以更快找到自己需要的商品,从而提升整个平台的转化率。

4.2.1 筛选功能的实现逻辑

筛选功能通常根据商品的多个属性进行操作,如品牌、价格区间、颜色、尺码等。在实现筛选功能时,需要考虑如何快速响应用户的筛选请求,并保持系统的高可用性。为了达到这一点,我们可以在前端使用缓存技术预加载筛选结果,并在后端通过数据库索引优化查询速度。

// JavaScript示例:前端筛选功能实现逻辑
function applyFilters() {
    var brand = document.getElementById('brand').value;
    var priceMin = parseInt(document.getElementById('price_min').value);
    var priceMax = parseInt(document.getElementById('price_max').value);
    // 发送筛选请求到后端
    fetch('/filter?' + new URLSearchParams({
        'brand': brand,
        'price_min': priceMin,
        'price_max': priceMax
    }))
    .then(response => response.json())
    .then(data => {
        // 更新商品列表
        updateProductList(data);
    })
    .catch(error => console.error('Error:', error));
}

4.2.2 商品排序算法与用户体验优化

商品排序算法需要根据用户的实际需求进行设计,常见的排序依据包括按价格、销量、评分、新品等进行排序。在技术实现上,需要结合数据库的排序功能,并考虑对用户操作的响应速度。

-- SQL示例:按照价格升序排序
SELECT * FROM products
ORDER BY price ASC;

在用户体验优化方面,排序功能应提供明确的排序选项,并且在用户选择排序方式后,能够立即反映在商品列表上。同时,后端服务需要确保排序操作的响应时间足够短,以便用户感知不到明显的延迟。

通过上述章节内容的探讨,我们可以看到商品浏览与筛选机制的实现并非简单的功能堆砌,而是需要综合考虑用户体验、系统性能与技术实现等多个方面。每一个功能点都需要精心设计与优化,才能在激烈的市场竞争中脱颖而出。

5. 支付功能与前端界面开发技术

在当今电子商务系统中,支付功能是交易闭环中至关重要的一步,而前端界面的体验则是吸引和留住用户的关键。本章将深入探讨如何整合多种支付方式,并对比分析主流前端框架的选型与应用。

5.1 多种支付方式的整合与实现

随着电子商务的发展,用户对支付方式的需求日趋多样化。为了满足不同用户的支付习惯,电商系统需要整合包括信用卡、第三方支付平台(如支付宝、微信支付)、虚拟货币等在内的多种支付方式。

5.1.1 支付流程的设计与安全

支付流程的设计需要简洁明了,保证用户在支付过程中的操作简便,同时也需要确保交易的安全性。以下是设计支付流程时需考虑的关键点:

  • 支付流程设计原则
  • 最小化用户操作步骤 :减少用户支付过程中的点击和输入,提高转化率。
  • 明确的错误提示 :当用户操作出错时,给予清晰的错误提示,帮助用户快速定位问题。
  • 安全的交易环境 :采用HTTPS、支付令牌(Token)等技术确保支付过程的安全性。

  • 支付流程示例

1. 用户选择商品,进入结算页面。
2. 用户选择支付方式,点击支付按钮。
3. 系统验证支付信息的有效性。
4. 系统调用支付接口,进入支付平台页面。
5. 用户完成支付平台的认证和支付操作。
6. 支付平台回调系统接口,确认支付结果。
7. 系统更新订单状态,反馈支付结果给用户。

5.1.2 第三方支付平台的接入

整合第三方支付平台是实现多支付方式的关键一步。常见的第三方支付平台有支付宝、微信支付等。以下是一个接入第三方支付平台的简化流程:

  • 接入前的准备工作
  • 注册成为支付平台的商户。
  • 获取支付平台分配的商户ID、公钥等信息。
  • 了解支付平台的API文档和技术要求。

  • 接入流程

  • 集成SDK :根据支付平台提供的SDK或API文档进行集成。
  • 配置支付参数 :在后台配置支付平台所需的各种参数。
  • 前端支付请求 :在前端创建支付请求,将用户信息和订单信息发送到支付平台。
  • 支付确认 :支付完成后,监听支付平台的回调,确认支付状态并更新订单。
  • 异常处理 :对支付失败或超时的订单进行异常处理,通知用户。

5.2 前端界面开发技术选型与应用

现代前端开发领域中,React、Vue和Angular是三大主流框架。它们各自拥有不同的特点和应用场景,接下来将进行对比分析,并探讨它们在商城系统中的实践应用。

5.2.1 React、Vue、Angular的对比分析

  • React
  • 由Facebook开发和维护。
  • 使用虚拟DOM(Virtual DOM)提高渲染效率。
  • 组件化开发,拥有丰富的生态系统,如Redux、MobX等。
  • Vue
  • 轻量级,易于上手,更适合快速开发。
  • 提供双向数据绑定(v-model)功能。
  • 同样拥有庞大的生态系统,如Vuex、Vue Router等。

  • Angular

  • 由Google开发和维护。
  • 是一个全面的框架,提供了完整的解决方案。
  • 适合构建大型企业级应用,支持TypeScript。

5.2.2 前端框架在商城系统中的实践应用

在商城系统中,选择合适的前端框架至关重要。以下是根据商城系统的特性进行框架选型的建议:

  • 商城首页与展示
  • React :适合用于构建高度动态的用户界面,可利用其组件化思想实现模块化开发。
  • Vue :提供简洁的模板语法,适合快速迭代的项目,易于实现商品展示和轮播等功能。
  • 购物车与结算
  • Vue :由于其易用性和快速响应数据变化的特性,非常适合处理实时更新的购物车数据。
  • 用户管理
  • Angular :复杂的数据管理与表单验证需求,Angular能够提供更加严格和完善的解决方案。

通过对比分析不同的前端框架,并结合商城系统的实际需求,开发者可以为不同的功能模块选择最合适的框架技术,从而在保证前端界面开发效率的同时,提供给用户最佳的使用体验。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本项目为在线购物平台,核心功能包括用户注册与登录、购物车管理以及支付流程。用户注册和登录模块收集并验证用户信息,购物车允许用户临时存储并管理商品,支付功能支持多种支付方式并确保交易安全。项目涵盖前端界面构建、后端服务开发、数据库管理,并使用安全技术保障系统。所有源代码、数据库脚本及配置文件打包为“购物商城”。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

本文章已经生成可运行项目
目 录 第1章 引言 1 1.1 选题背景 1 1.2 网上购物系统的发展现状 1 1.3系统实现的目标 2 1.4系统的开发意义 2 第2章 系统的开发技术及主要架构 3 2.1开发技术的选择 3 2.2系统的主要架构及开发模式 3 2.2.1基于B/S的体系结构 4 2.2.2 基于MVC的应用开发模型 4 第3章 系统的功能和流程 7 3.1网站的功能分析 7 3.2 系统流程分析 8 3.2.1前台购物流程 8 3.2.2注册功能流程 9 3.2.3商品搜索流程 10 3.2.4用户登录流程 10 3.2.5商品类别管理流程 11 3.2.6商品管理流程 11 3.2.7购物车流程 12 第4章 系统概要设计 13 4.1 系统数据库设计 13 4.1.1数据库的概念结构模型设计 13 4.1.2数据库的逻辑结构模型设计 15 4.2功能模块设计 17 第5章 网上购物系统详细设计实现 19 5.1 数据库的连接 19 5.2前台各功能模块的实现 19 5.2.2 注册登陆模块的实现 19 5.2.3 个人信息维护的实现 23 5.2.4 商品搜索模块的实现 25 5.2.5 商品浏览模块的实现 26 5.2.6 购物车模块的实现 28 5.3 后台各功能模块的实现 30 5.3.1 管理员登录模块的实现 30 5.3.2 会员管理模块的实现 32 5.3.3 类别管理模块的实现 32 5.3.4 商品管理模块的实现 34 5.3.5 订单管理模块的实现 36 5.3.6 销量统计模块的实现 38 第6章 系统测试及难点分析 40 6.1系统运行环境的搭建 40 6.1.1 JAVA虚拟机的安装 40 6.1.2 Tomcat环境搭建 40 6.2 系统程序的安装和加载 41 6.2.1 文件的拷贝 41 6.2.2 数据库的连接 41 6.2.3 Myeclipse开发工具 41 6.3系统测试 42 6.3.1 系统关键部分测试分析 42 6.3.2 系统功能测试 42 6.3.3 测试总结 46 6.3.4 系统的性能分析 47 6.4 系统中所存在的问题及解决方案 47 6.4.1 系统的整体设计和规划中的问题 47 6.4.2 开发功能模块所遇到的难点 48 6.4.3系统中存在的问题及拟定的解决方法 48 结  论 50 致 谢 51 参考文献 52
网上购物系统设计实现课程设计 四、程序关键代码及效果图 1、过滤器代码:[只要doFilter()方法] (1)adminfilter.java: HttpServletRequest requ=(HttpServletRequest)req; res.setCharacterEncoding("gb18030"); requ.setCharacterEncoding("gb18030"); HttpSession session=requ.getSession(); if(session.getAttribute("admin")==null){ PrintWriter out=res.getWriter(); out.println("[removed]"); out.println("alert('您还没有登录!');"); out.println("[removed].href='../login_admin.jsp';"); out.println("[removed]"); }else{ chain.doFilter(req, res); } (2)userfilter.java: HttpServletRequest requ=(HttpServletRequest)req; res.setCharacterEncoding("gb18030"); requ.setCharacterEncoding("gb18030"); HttpSession session=requ.getSession(); if(session.getAttribute("uname")==null){ PrintWriter out=res.getWriter(); out.println("[removed]"); out.println("alert('您还没有登录!');"); out.println("[removed].href='../login.html';"); out.println("[removed]"); }else{ chain.doFilter(req, res); } (3)Encodingfilter.java: HttpServletRequest request=(HttpServletRequest)req; request.setCharacterEncoding("gb18030"); HttpServletResponse response=(HttpServletResponse)res; response.setCharacterEncoding("gb18030"); chain.doFilter(req, res); } 2、Servlet代码:[只要doPost()或doGet()方法] (1)add.java: response.setContentType("text/html"); request.setCharacterEncoding("gb18030"); HttpSession session=request.getSession(); CartBean cb=new CartBean(); Vector cart =(Vector)session.getAttribute("cart"); String id=request.getParameter("id"); if(cart==null){ cart=new Vector(); } cart=cb.addCart(cart,id); session.setAttribute("cart",cart); response.sendRedirect("cart.jsp"); } (2)addproduct.java: PrintWriter out=response.getWriter(); Product p = new Product(); SmartUpload su = new SmartUpload(); su.initialize(this.getServletConfig(), request, response); su.setMaxFileSize(1024 * 1024 * 10); su.setAllowedFilesList("JPG,jpg,gif,GIF");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值