问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用Struts2.0+Spring2.0+hibernate3.1怎样实现文件的上传和下载?

发布网友 发布时间:2022-04-07 22:59

我来回答

4个回答

懂视网 时间:2022-04-08 03:20

20) NOT NULL AUTO_INCREMENT, `realName` varchar(36) DEFAULT NULL, `fileContent` mediumblob, `handId` bigint(20) DEFAULT NULL, `customerId` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_id` (`handId`), CONSTRAINT `fk_id` FOREIGN KEY (`handId`) REFERENCES `handprocess` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `handprocess` ( `id` bigint(20) NOT NULL DEFAULT ‘0‘, `handTime` bigint(20) DEFAULT NULL, `handName` varchar(20) DEFAULT NULL, `reason` varchar(100) DEFAULT NULL, `annexStr` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

处理过程(handprocess)和附件表(annex)一对多关系,一条处理过程可以有多个附件

除了springmvc+hibernate+spring的jar,还需要

commons-fileupload-1.3.1.jar

commons-io-2.0.1.jar

数据库保存上传文件内容使用mediumblob类型

mysql保存数据库二进制文件使用blob类型,其大小如下

TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G

springmvc中需添加配置文件

<bean id="multipartResolver"
 class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
 <property name="maxUploadSize" value="10000000"></property> <!-- byte -->
 <property name="defaultEncoding" value="utf-8" />
 </bean>

其中maxUploadSizes的大小是上传文件大小,单位:字节

实体:

package com.h3c.zgc.upload;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
 * 附件 和处理过程多对一
 * @author GoodLuck
 *
 */
@Entity
@Table(name="annex",catalog="itac")
public class Annex {
 @Id
 @Column(name="id")
 private Long id;
 //上传文件的名称
 @Column(name="realName")
 private String realName;
 //上传文件的内容
 @Column(name="fileContent")
 private byte[] fileContent;
 //处理过程的id
 @Column(name="handId")
 private Long handId;
 //客户id
 @Column(name="customerId")
 private Long customerId;
 
 //getter and setter ...
 
 
}
package com.h3c.zgc.upload;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@Table(name="handprocess",catalog="itac")
public class HandProcess {
 
 @Id
 @Column(name="id")
 private Long id;
 @Column(name="handTime")
 private Long handTime;
 @Column(name="handName")
 private String handName;
 @Column(name="reason")
 private String reason;
 @Column(name="annexStr")
 private String annexStr;
 @Transient
 private String handTimeStr;
 
 //getter and setter ...
 
 
}

dao层

package com.h3c.zgc.upload;

import java.io.Serializable;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

@Repository
public class UploadDownDao extends HibernateDaoSupport{
 @Resource
 public void set(SessionFactory sessionFactory){
 this.setSessionFactory(sessionFactory);
 }
 
 public Session getSession(){
 return this.getSessionFactory().openSession();
 }
 /**
 * 获取附件id最大值
 */
 public Long getMaxIdOfAnnex(){
 List l = this.getHibernateTemplate().find("select max(id) from Annex");
 System.out.println(l);
 if(l!=null&&l.size()==1&&l.get(0)!=null){
  return (Long) l.get(0);
 }
 return 0L;
 }
 /**
 * 获取处理过程id最大值
 * @return
 */
 public Long getMaxIdOfHandProcess(){
 List l = this.getHibernateTemplate().find("select max(id) from HandProcess");
 System.out.println(l);
 if(l!=null&&l.size()==1&&l.get(0)!=null){
  return (Long) l.get(0);
 }
 return 0L;
 }
 /**
 * 保存附件
 * @param annex
 * @return
 */
 public Serializable saveAnnex(Annex annex){
 return this.getHibernateTemplate().save(annex);
 }
 /**
 * 保存处理过程
 * @param hp
 * @return
 */
 public Serializable saveHandProcess(HandProcess hp){
 return this.getHibernateTemplate().save(hp);
 }
 /**
 * 获取处理过程列表,左连接查询
 * @return
 */
 public List getHandProcessList(){//有没有可能没有附件,附件annex,处理过程handprocess
 SQLQuery query = this.getSession().createSQLQuery("select h.id handprocessId,h.annexStr annexStr,a.id annexId,a.realName realName,h.handTime handTime,h.handName handName,h.reason reason from handprocess h left join annex a on a.handId=h.id");
 query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
 List list = query.list();
 return list;
 }
 /**
 * 根据id获取附件信息
 * @param annexId
 * @return
 */
 public Annex getAnnexById(Long annexId){
 return this.getHibernateTemplate().get(Annex.class, annexId);
 }
 /**
 * 修改处理过程
 * @param hp
 */
 public void updateHandProcess(HandProcess hp){
 this.getHibernateTemplate().update(hp);
 }
}

service层

package com.h3c.zgc.upload;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.transaction.Transactional;

import org.springframework.stereotype.Service;

@Service
public class UploadDownService {

 @Resource
 private UploadDownDao uploadDownDao;
 
 public Long getMaxIdOfAnnex(){
 return this.uploadDownDao.getMaxIdOfAnnex();
 }
 public Long getMaxIdOfHandProcess(){
 return this.uploadDownDao.getMaxIdOfHandProcess();
 }
 @Transactional
 public Serializable saveAnnex(Annex annex){
 return this.uploadDownDao.saveAnnex(annex);
 }
 @Transactional
 public Serializable saveHandProcess(HandProcess hp){
 return this.uploadDownDao.saveHandProcess(hp);
 }
 public Annex getAnnexById(Long annexId){
 return this.uploadDownDao.getAnnexById(annexId);
 }
 public List<Map<String,Object>> getHandProcessList(){
 return this.uploadDownDao.getHandProcessList();
 }
 @Transactional
 public void updateHandProcess(HandProcess hp){
 this.uploadDownDao.updateHandProcess(hp);
 }
}

controller层

package com.h3c.zgc.upload;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;

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

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class UploadDownFileController {
 @Resource
 private UploadDownService uploadDownService;
 //单文件上传到数据库,MultipartFile中封装了上传文件的信息
 @RequestMapping("upload")
 public String upload(HandProcess hp, HttpServletRequest request,
  @RequestParam("uploadFile1") MultipartFile uploadFile1)
  throws IOException, ParseException {
 
 InputStream is = uploadFile1.getInputStream();
 byte[] buffer = this.inputStrean2ByteArr(is);
 /**
  * 保存处理过程信息
  */
 // get max id then ++1
 Long hpMaxId = this.uploadDownService.getMaxIdOfHandProcess();
 DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
 hp.setHandTime(df.parse(hp.getHandTimeStr()).getTime());
 hp.setId(hpMaxId + 1);
 //保存处理过程
 Serializable hpId = this.uploadDownService.saveHandProcess(hp);
 /**
  * 保存附件
  */
 Annex annex = new Annex();
 annex.setCustomerId(1L);
 annex.setHandId((Long) hpId);
 annex.setRealName(uploadFile1.getOriginalFilename());
 annex.setFileContent(buffer);
 //查找附件id最大值
 annex.setId(this.uploadDownService.getMaxIdOfAnnex() + 1);
 Serializable aid = this.uploadDownService.saveAnnex(annex);
 /**
  * 获取处理过程列表
  */
 List<Map<String, Object>> as = this.uploadDownService
  .getHandProcessList();
 for (Map<String, Object> map : as) {
  map.put("handTime", df.format(map.get("handTime")));
 }
 request.setAttribute("as", as);
 return "annex/annexList";
 }
 /**
 * 多文件上传
 * @param hp 处理过程
 * @param request
 * @param uploadFile1 上传文件
 * @return
 * @throws IOException
 * @throws ParseException
 */
 @RequestMapping("uploadOneMore")
 public String uploadOneMore(HandProcess hp, HttpServletRequest request,
  @RequestParam("uploadFile1") MultipartFile[] uploadFile1)
  throws IOException, ParseException {
 /**
  * 保存处理过程信息
  */
 // get max id then ++1
 Long hpMaxId = this.uploadDownService.getMaxIdOfHandProcess();
 DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
 hp.setHandTime(df.parse(hp.getHandTimeStr()).getTime());
 hp.setId(hpMaxId + 1);
 //
 Serializable hpId = this.uploadDownService.saveHandProcess(hp);
 //保存改工单下的所有附件
 for (int i = 0; i < uploadFile1.length; i++) {
  InputStream is = uploadFile1[i].getInputStream();
  byte[] buffer = this.inputStrean2ByteArr(is);

  /**
  * 保存附件
  */
  Annex annex = new Annex();
  annex.setCustomerId(1L);
  annex.setHandId((Long) hpId);
  annex.setRealName(uploadFile1[i].getOriginalFilename());
  annex.setFileContent(buffer);
  annex.setId(this.uploadDownService.getMaxIdOfAnnex() + 1);
  Serializable annexId = this.uploadDownService.saveAnnex(annex);
  
 }
 //多文件上传,一个处理过程下面要有多个附件,在页面中显示的时候,一个处理过程后面要显示多个附件
 //更新表handprocess
 this.uploadDownService.updateHandProcess(hp);
 
 List<Map<String, Object>> as = this.uploadDownService
  .getHandProcessList();
 request.setAttribute("as", as);
 return "annex/annexList";
 }
 
 /**
 * 文件下载
 * @param response
 * @param annexId
 * @throws IOException
 */
 @RequestMapping("download")
 public void download(HttpServletResponse response, Long annexId)
  throws IOException {
 Annex a = this.uploadDownService.getAnnexById(annexId);
 byte[] b = a.getFileContent();
 response.setContentType("application/octet-stream;charset=UTF-8");
 response.setCharacterEncoding("utf-8");
 response.setHeader("Content-Disposition",
  "attachment;filename=" + new String(a.getRealName().getBytes("gbk"),"iso-8859-1")); //防止文件乱码

 BufferedOutputStream bos = new BufferedOutputStream(
  response.getOutputStream());
 bos.write(b);
 bos.close();
 }
 /**
 * inputstream转成byte数组
 * @param inStream
 * @return
 * @throws IOException
 */
 public byte[] inputStrean2ByteArr(InputStream inStream) throws IOException {
 ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
 byte[] buff = new byte[100];
 int rc = 0;
 while ((rc = inStream.read(buff, 0, 100)) > 0) {
  swapStream.write(buff, 0, rc);
 }
 byte[] in2b = swapStream.toByteArray();
 return in2b;
 }

}

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/resources/js/jquery-1.11.1.js"></script>
</head>
<body>
<a href="${pageContext.request.contextPath }/getAllStudent">查找所有用户</a>
<a href="${pageContext.request.contextPath }/savePerson">单独保存Person</a>
<a href="${pageContext.request.contextPath }/savePersonHouse">保存Person和House</a>
<br/>
<form action="${pageContext.request.contextPath }/getArr" >
 <input type="text" name="workSheetId"/><br/>
 <input type="submit" value="search"/>
</form>
<br/><br/><br/> 
<form action="<c:url value="/upload"/>" method="post" enctype="multipart/form-data">
 处理时间:<input type="text" name="handTimeStr"/><br>
 处理人:<input type="text" name="handName"/><br/>
 原因:<input type="text" name="reason"/><br/>
 选择文件:<input type="file" name="uploadFile1"/><br/>
 <input type="submit" value="submit"/>
</form>
<br/>
upload one more
<form action="<c:url value="/uploadOneMore"/>" method="post" enctype="multipart/form-data">
 处理时间:<input type="text" name="handTimeStr"/><br>
 处理人:<input type="text" name="handName"/><br/>
 原因:<input type="text" name="reason"/><br/>
 选择文件:<input type="file" name="uploadFile1"/><br/>
 选择文件:<input type="file" name="uploadFile1"/><br/>
 选择文件:<input type="file" name="uploadFile1"/><br/>
 <input type="submit" value="submit"/>
</form>
</body>
</html>

annexList.jsp  显示处理过程已经处理过程下附件

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript"
 src="${pageContext.request.contextPath }/resources/js/jquery-1.11.1.js"></script>
</head>
<body>
 <table>
 <c:forEach items="${as }" var="ah" varStatus="status">
  <tr>
  <td>${ah[‘handprocessId‘] }</td>
  <td>${ah[‘handName‘] }</td>
  <td>${ah[‘reason‘] }</td>
  <td id="id${status.index }">${ah[‘handTime‘] }</td>
  
  <td>
   ${ah[‘annex‘][‘realName‘] }
   <a href="<c:url value="/download?annexId=${ah[‘annexId‘] }"/>">${ah[‘realName‘] }</a>
  </td>
  </tr>
 </c:forEach>


 </table>
</body>
<script type="text/javascript">
 
</script>
</html>

 

springMVC+spring+hibernate注解上传文件到数据库,下载,多文件上传

标签:

热心网友 时间:2022-04-08 00:28

利用MultipartFile实现文件上传
在java中上传文件似乎总有点麻烦,没.net那么简单,记得最开始的时候用smartUpload实现文件上传,最近在工作中使用spring的MultipartFile实现文件上传,感觉挺简单,在这里和大家分享一下.
一.主要有两个java类,和一般的servlet放在一起即可.
1.FileUploadBean.java
package chb.demo.web;

import org.springframework.web.multipart.MultipartFile;

/**
* @author chb
*
*/
public class FileUploadBean {

private MultipartFile file;

public void setFile(MultipartFile file) {
this.file = file;
}

public MultipartFile getFile() {
return file;
}
}
2.FileUploadController.java
package chb.demo.web;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

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

import org.springframework.validation.BindException;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

/**
* @author chb
*
*/
public class FileUploadController extends SimpleFormController {

protected ModelAndView onSubmit(
HttpServletRequest request,
HttpServletResponse response,
Object command,
BindException errors){

try
{
// cast the bean
FileUploadBean bean = (FileUploadBean) command;

// let's see if there's content there
MultipartFile file = bean.getFile();

if (file == null) {
throw new Exception("上传失败:文件为�空");
}
if(file.getSize()>10000000)
{
throw new Exception("上传失败:文件大小不能超过10M");
}
//得到文件�名
String filename=file.getOriginalFilename();

if(file.getSize()>0){
try {
SaveFileFromInputStream(file.getInputStream(),"D:/",filename);
} catch (IOException e) {
System.out.println(e.getMessage());
return null;
}
}
else{
throw new Exception("上传失败:上传文件不能为�空");
}
// well, let's do nothing with the bean for now and return:
try {
return super.onSubmit(request, response, command, errors);

} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
return null;
}
}

/**保存文件
* @param stream
* @param path
* @param filename
* @throws IOException
*/
public void SaveFileFromInputStream(InputStream stream,String path,String filename) throws IOException
{
FileOutputStream fs=new FileOutputStream( path + "/"+ filename);
byte[] buffer =new byte[1024*1024];
int bytesum = 0;
int byteread = 0;
while ((byteread=stream.read(buffer))!=-1)
{
bytesum+=byteread;
fs.write(buffer,0,byteread);
fs.flush();
}
fs.close();
stream.close();
}
}

二.配置文件中如下配置:
1.web.xml,利用spring mvc模式,大家应该都很熟悉了
<servlet>
<servlet-name>chb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>chb</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
2.chb-servlet.xml,这里要配置映射,并可以设定最大可上传文件的大小
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- Multi-Action 用来标识method的变量名定义-->
<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName">
<value>action</value>
</property>
<property name="defaultMethodName">
<value>index</value>
</property>
</bean>

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes -->
<property name="maxUploadSize" value="10000000"/>
</bean>

<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/upload.do">fileUploadController</prop>
</props>
</property>
</bean>

<bean id="fileUploadController" class="chb.demo.web.FileUploadController">
<property name="commandClass" value="chb.demo.web.FileUploadBean"/>
<!-- 上传失败时跳转页面 -->
<property name="formView" value="/user/err.jsp"/>
<!-- 上传成功时跳转页面 -->
<property name="successView" value="/user/confirmation.jsp"/>
</bean>
</beans>
三.设定jsp页面
<form id="form1" method="post" action="upload.do" enctype="multipart/form-data">
<tr>
<td width="25%" align="right">上传文件:</td>
<td><input id="file" type="file" NAME="file" style="width:300px;"></td>
</tr>
<tr align="center" valign="middle">
<td height="60" colspan="2"><input type="submit" ID="BtnOK" value="确认上传"></td>
</tr>
</form>
ok,现在就可以上传文件了,挺简单吧?这里我只列出了基本步骤,至于具体的操作(比如中文问题)可能就需要大家自己再完善完善了.

热心网友 时间:2022-04-08 01:46

用struts2就行。上传文件跟spring和hibernate无关。
代码大概如下,要自己改一下才行

-----------------------------------------------
<form action="publish.do" name="form1" method="post" enctype="multipart/form-data">
<input name="file1" type="file" id="file1"/>
</form>

public class PublishAction extends ActionSupport
{
private static final long serialVersionUID = 572146812454l ;
private static final int BUFFER_SIZE = 16 * 1024 ;

private File file1;
private String fileName1;

public void setFile1FileName(String fileName1)
{
this.fileName1 = fileName1;
}

public void setFile1(File file1)
{
this.file1 = file1;
}

public String execute()
{
UploadFile(file1,fileName1);
return "success";
}
private void UploadFile(File file,String filename)
{
if(file != null)
{
String filepath = ServletActionContext.getServletContext().getRealPath( "ArtImg" ) + "\\" + filename;
File dst = new File(filepath);
copy(file, dst);
filepath = "\\BBS\\ArtImg\\"+ filename;
}
}
private static void copy(File src, File dst)
{
try
{
InputStream in = null ;
OutputStream out = null ;
try
{
in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
byte [] buffer = new byte [BUFFER_SIZE];
while (in.read(buffer) > 0 )
{
out.write(buffer);
}
}
finally
{
if ( null != in)
{
in.close();
}
if ( null != out)
{
out.close();
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}

}

热心网友 时间:2022-04-08 03:21

apache上common项目中有fileUpload这个组件,希望对你有用
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
!这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 旅长问李云龙捞了多少好处,李云龙为什么不说弄了一个骑兵连? 旅长命令李云龙当团长,为何他要提无理要求? 《亮剑》:李云龙手下的王有胜挨了打为什么坐在街边嚎啕大哭? 纵情豪饮挥拳飞脚,赵刚是被李云龙带歪了吗? Avsoft Virtual Audio Device设置默认失败 手机里&quot;SynaTool APK&quot;是什么软件? 绝地求生李云龙语言包怎么让队友听见? 绝地求生里李云龙的语音包怎么弄? oppe r11用李云龙语音包,自己可以听到,队友听不到,谁知道怎么设置呀,或者给我另外一个语音助 下载李云龙的语音然后按住播放李云龙说话按住微信发出去的这个软件叫啥 有没有这款按住李云龙说话声音通过微信发出去的软件叫啥名字 亮剑李云龙微信语音按住可以发出去的软件 泡批把酒怎么做? 枇芭酒怎样泡 电视机,用音频线和用HDMI高清线连接音响,音质那个好? 高清的播放机,用高清线接电视,然后只接上av接口的音频线到音响,这种接法可以吗?? 电脑电视用了高清数据线还要音频线吗 接HDMI线后,就不能再连接音频输出线了吗? 电脑音频线与HDMl线同时使用有很大杂音,是什么原因 电脑音频线与HDM|同时使用,杂音很多大 李云龙被降成营长了,为何照样指挥独立团? 李云龙为什么无赖呢? 58同城怎样发布求购信息 常用的直播数据有哪几类 直播间数据管理在哪 梦幻西游中:59级力天宫怎么加点比较好? 梦幻西游天宫59怎么加点 梦幻西游59辅助天宫加点 梦幻西游59力天宫加点及装备 梦幻西游59力天宫伤害多少,怎么加点 梦幻西游天宫停59或69如何加点 怎样提取别人公众里面的图文信息中的视频链接 小米手机屏幕保修吗 梦幻西游天宫加点问题:请细看问题详细描述 你好,我买的小米手机不到两个月,屏幕摔坏了,请问能免费维修吗? 梦幻西游玩59力天宫怎么加点好? 小米cc九屏幕碎了一个小角一年内保修吗? 小米手机屏幕爆属于保修范围内吗? 携程网我使用的是境外信用卡(如visa 腾讯金融科技旗下有哪些跨境支付产品?实用吗?